我需要改变这样的:"foo_bar_baz_2"
到"fooBarBaz2"
替换所有捕获组
我试图用这个模式:
Pattern pattern = Pattern.compile("_([a-z])");
Matcher matcher = pattern.matcher("foo_bar_baz_2");
是否有可能使用matcher
以取代第一捕获组( '_'后面的字母与大写的被捕获组合]?
我需要改变这样的:"foo_bar_baz_2"
到"fooBarBaz2"
替换所有捕获组
我试图用这个模式:
Pattern pattern = Pattern.compile("_([a-z])");
Matcher matcher = pattern.matcher("foo_bar_baz_2");
是否有可能使用matcher
以取代第一捕获组( '_'后面的字母与大写的被捕获组合]?
您可以使用匹配的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);
是的,这是可能的(我猜的人谁知道Java的比我还可以告诉你如何)。我只想指出,使用这个正则表达式,你会得到'fooBarBaz_2',因为'[a-z]'不匹配'2'。 –