Я просмотрел несколько сообщений в stackoverflow о том, как разбить строку на разделитель запятой, но игнорировать разделение на запятую в кавычках (см. Как разбить строку на массив по запятой, но игнорировать запятые внутри двойных кавычек?) Я пытаюсь достичь аналогичных результатов, но также должен содержать строку, содержащую одну двойную кавычку.
IE. Нужно "test05, \"test, 05\", test\", test 05"
разбиться на
-
test05
-
"test, 05"
-
test"
-
test 05
Я попробовал аналогичный метод, упомянутый здесь:
Использование Matcher вместо split()
. однако, что конкретные примеры разбиваются на пробелы, а не на запятые. Я попытался скорректировать шаблон для учетной записи для запятых, но не имел никакой удачи.
String str = "test05, \"test, 05\", test\", test 05";
str = str + " "; // add trailing space
int len = str.length();
Matcher m = Pattern.compile("((\"[^\"]+?\")|([^,]+?)),++").matcher(str);
for (int i = 0; i < len; i++)
{
m.region(i, len);
if (m.lookingAt())
{
String s = m.group(1);
if ((s.startsWith("\"") && s.endsWith("\"")))
{
s = s.substring(1, s.length() - 1);
}
System.out.println(i + ": \"" + s + "\"");
i += (m.group(0).length() - 1);
}
}