0

我需要改变一些东西"foo_bar_baz_2""fooBarBaz2"

我正在尝试使用这种模式:

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

是否可以用matcher大写的捕获组替换第一个捕获的组('_'后面的字母)?

4

3 回答 3

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());
于 2011-07-20T12:20:07.600 回答
3

是的。替换为\U$1\E- 表示为 Java 字符串"\\U$1\\E"

只要您的正则表达式中没有其他内容,您就可以转储\E并缩短为\U$1.


考虑到@TimPietzcker 的评论,您的正则表达式本身应该是"_([a-z0-9])".

于 2011-07-20T12:15:51.023 回答
1
StringBuffer sb = new StringBuffer();
while (matcher.find()) {
    matcher.appendReplacement(sb, matcher.group(1).toUpperCase());
}
matcher.appendTail(sb);
于 2011-07-20T12:19:14.240 回答