Заменить все захваченные группы
Мне нужно преобразовать что-то вроде: "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);