разбить строку с помощью регулярных выражений - PullRequest
2 голосов
/ 04 марта 2011

Я пытаюсь использовать split(), чтобы получить этот вывод:

Colour = "Red/White/Blue/Green/Yellow/"
Colour = "Orange"

... но не удалось. Что я делаю не так?

По сути, я сопоставляю последнюю / и разбиваю там строку.

String pattern = "[\\/]$";
String colours = "Red/White/Blue/Green/Yellow/Orange";

Pattern splitter = Pattern.compile(pattern);
String[] result = splitter.split(colours);

for (String colour : result) {
    System.out.println("Colour = \"" + colour + "\"");
}

Ответы [ 3 ]

3 голосов
/ 04 марта 2011

Вам нужно разделить строку на last /. Регулярное выражение для совпадения с последним /:

/(?!.*/)

Посмотреть на IdeOne

Пояснение:

/       : A literal /
(?!.*/) : Negative lookahead assertion. So the literal / above is matched only 
          if it is not followed by any other /. So it matches only the last /
1 голос
/ 04 марта 2011

Ваш шаблон неправильный, вы поместили $, который говорит, что должен закончиться /, удалите $, и он должен работать нормально.

Пока мыпри этом вы можете просто использовать String.split

String colours = "Red/White/Blue/Green/Yellow/Orange";
String[] result = colours.split("\\/");

for (String colour : result) {
    System.out.println("Colour = \"" + colour + "\"");
}
1 голос
/ 04 марта 2011

Как насчет:

int ix = colours.lastIndexOf('/') + 1;
String[] result = { colours.substring(0, ix), colours.substring(ix) };

(РЕДАКТИРОВАТЬ: исправлено, чтобы включить трейлинг / в конце первой строки.)

...