Номера соответствия операторов / операторов - PullRequest
1 голос
/ 25 октября 2010

Эй, я пытался выяснить, почему это регулярное выражение не соответствует правильно.


    List l_operators = Arrays.asList(Pattern.compile(" (\\d+)").split(rtString.trim()));
    
Входная строка: "12+22+3"

Я получаю вывод -- [,+,+]

Есть совпадение в начале списка, которого там быть не должно? Я действительно не могу видеть это, и я мог бы использовать некоторое понимание. Спасибо.

Ответы [ 3 ]

2 голосов
/ 25 октября 2010

Ну, технически, есть пустая строка перед первым разделителем (первая последовательность цифр).Если у вас есть, скажем, строка CSV, например, abc,def,ghi, а другая - ,jkl,mno, вы бы явно хотели знать, что первое значение во второй строке было пустой строкой. Таким образом, поведение является желательным в большинстве случаев.

В вашем конкретном случае вам нужно разобраться с ним вручную или каким-либо образом улучшить свое регулярное выражение.Например, вот так:

Pattern p = Pattern.compile("\\d+");
Matcher m = p.matcher(rtString);
if (m.find()) {
  List l_operators = Arrays.asList(p.split(rtString.substring(m.end()).trim()));
  // ...
}

В идеале, вы должны использовать парсер для этих типов строк.Например, вы не можете иметь дело с круглыми скобками в выражениях, используя только регулярные выражения.

1 голос
/ 25 октября 2010

Это поведение расщепления в Java.Вам просто нужно взять его (и разобраться с ним) или использовать другую библиотеку, чтобы разбить строку.Я лично стараюсь избегать разделения от Java.

Примером одной альтернативы является просмотр Splitter из Google Guava.

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

Попробуйте Guava's Splitter .

Splitter.onPattern("\\d+").omitEmptyStrings().split(rtString)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...