заменить все захваченные группы - PullRequest
0 голосов
/ 20 июля 2011

Мне нужно преобразовать что-то вроде: "foo_bar_baz_2" в "fooBarBaz2"

Я пытаюсь использовать этот паттерн:

Pattern pattern = Pattern.compile("_([a-z])");
Matcher matcher = pattern.matcher("foo_bar_baz_2");

Можно ли использовать matcher для замены первой захваченной группы (буква после '_') на захваченную группу в верхнем регистре?

Ответы [ 3 ]

3 голосов
/ 20 июля 2011

Вы можете использовать методы appendReplacement / appendTail средства сопоставления следующим образом:

Pattern pattern = Pattern.compile("_([a-z0-9])");
Matcher matcher = pattern.matcher("foo_bar_baz_2");

StringBuffer stringBuffer = new StringBuffer();
while(matcher.find()) {
    matcher.appendReplacement(stringBuffer, matcher.group(1).toUpperCase());
}
matcher.appendTail(stringBuffer);

System.out.println(stringBuffer.toString());
3 голосов
/ 20 июля 2011

Да. Заменить на \U$1\E - представлено в виде строки Java "\\U$1\\E"

Пока в вашем регулярном выражении больше ничего нет, вы можете сбросить \E и сократить до \U$1.


Принимая во внимание комментарий @TimPietzcker, само ваше регулярное выражение должно быть "_([a-z0-9])".

1 голос
/ 20 июля 2011
StringBuffer sb = new StringBuffer();
while (matcher.find()) {
    matcher.appendReplacement(sb, matcher.group(1).toUpperCase());
}
matcher.appendTail(sb);
...