Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 替换所有捕获的组_Java_Regex_Capturing Group - Fatal编程技术网

Java 替换所有捕获的组

Java 替换所有捕获的组,java,regex,capturing-group,Java,Regex,Capturing Group,我需要将以下内容转换为:“foo\u bar\u baz\u 2”到“fooBarBaz2” 我尝试使用这种模式: Pattern pattern = Pattern.compile("_([a-z])"); Matcher matcher = pattern.matcher("foo_bar_baz_2"); 是否可以使用matcher将第一个捕获的组(在“_”之后的字母)替换为大写的捕获组?是。替换为\U$1\E-表示为Java字符串“\\U$1\\E” 只要正则表达式中没有其他内容,就可

我需要将以下内容转换为:
“foo\u bar\u baz\u 2”
“fooBarBaz2”

我尝试使用这种模式:

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

是否可以使用
matcher
将第一个捕获的组(在“_”之后的字母)替换为大写的捕获组?

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

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



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

您可以使用匹配器的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());
是的,这是有可能的(我想比我更了解Java的人也可以告诉你怎么做)。我只是想指出,使用该正则表达式,您将得到
fooBarBaz_2
,因为
[a-z]
2
不匹配。
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());