Javadoc说$ 1,$ 2等可以用来引用匹配组,但是使用时如何引用替换字符串中最新找到的组String.replaceAll()呢?
String.replaceAll()
即有一个字符串"aaabbbaa"和一个正则表达式"a+",我希望能够做类似s.replaceAll("a+", "$\n")get的事情"aaa\nbbbaa\n",但是Java给了我Illegal group reference。
"aaabbbaa"
"a+"
s.replaceAll("a+", "$\n")
"aaa\nbbbaa\n"
Illegal group reference
s.replaceAll("(a+)", "$1\n") 应该管用:
s.replaceAll("(a+)", "$1\n")
jshell> String s = "aaabbbaa" s ==> "aaabbbaa" jshell> s.replaceAll("(a+)", "$1\n") $2 ==> "aaa\nbbbaa\n"
正如注释中已经指出的那样,您必须在正则表达式中标记捕获组。这就是括号的(...)作用。然后,您必须使用来引用该捕获组$1,这是第一个捕获组。$0将是整个比赛(也在注释中指出),但$将无法正常工作。
(...)
$1
$0
$