Заменить все захваченные группы

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

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

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

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

3 ответа

Решение

Вы можете использовать методы 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());

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

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


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

StringBuffer sb = new StringBuffer();
while (matcher.find()) {
    matcher.appendReplacement(sb, matcher.group(1).toUpperCase());
}
matcher.appendTail(sb);
Другие вопросы по тегам