Java - string.split со встречными регулярными выражениями - PullRequest
0 голосов
/ 25 октября 2018

Я недавно сталкивался с этой проблемой и не знаю, как ее решить.Я знаю, что в классе String у нас есть метод split , который принимает регулярное выражение и, основываясь на регулярном выражении, данная строка разбивается на разные строки и возвращается в массив строк.

Например, если у меня есть

String s = "A,B,C";

, а у меня есть

System.out.println(Arrays.toString(s.split(",")));

, он выведет [A, B, C] на выходную консоль.

Теперьскажем, моя строка

String s = "A,\"\"B\"\",\"\"C\"\",D";   //easier to read version: A,""B"",""C"",D

и я использую следующее регулярное выражение для разбиения строки:

String regex = ",|,\"\"|\"\",|\"\",\"\"";  // matches , OR ,"" OR "", OR "",""
System.out.println(Arrays.toString(s.split(regex)));

Я получаю вывод как [A, "B," "C,D].Как расщепление работает здесь?И как мне определить мое регулярное выражение, чтобы я получил [A, B, C, D] в качестве выходных данных?

ПРИМЕЧАНИЕ: я знаю, что я хочу достичь, можно сделать другими способами (например, методом replaceAll), но я хочу использовать только String.split для этой проблемы, так как я хочу знать, как его использоватьв этом случае.

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Как объяснено здесь , механизм регулярных выражений стремится остановить работу после успешного сопоставления с запятой (первое чередование).Другой ответ - один из способов решения этой проблемы.Другой способ - использовать квантификаторы:

,(\"\")?|\"\"(,\"\")?

Посмотрите, как это работает на Regex101

0 голосов
/ 25 октября 2018

Всегда заказывайте альтернативы от самых больших до самых маленьких:

String regex = "\"\",\"\"|,\"\"|\"\",|,";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...