Java replaceAll with [] * - 找到所有字符(长度为9)但结果长度为2

时间:2017-07-17 07:04:36

标签: java regex

我刚刚开始学习正则表达式并拥有以下代码:

 [1] String replace2 = "chocolate".replaceAll("[a-z]*","*");
 [2] System.out.println(replace2);                   //output: **
 [3] replace2 = "chocolate".replaceAll("[a-c]*","*");
 [4] System.out.println(replace2);                  //output: **h*o**o*l**t*e*

我不明白*在这种情况下如何工作:

参考[3],我的理解是每个发现的角色都被一颗星代替,每个未发现的角色都被“一颗星+未发现的角色”取代

例如,字符串“chocolate”中的第一个字符是c,所以用*替换它。第二个字符是h,它不是我们想要的,所以用* h保留它。我可以将此逻辑与[4]处的输出相匹配。

我的问题是为什么[2]会返回两颗星?

2 个答案:

答案 0 :(得分:5)

星号*标记在RegEx中表示匹配前一个模式的“零或更多”。

在你的情况下,行[1]匹配整个字符串,然后匹配一个空字符串,因此**结果。

在行[3]中,每个匹配的一个或多个字母将匹配,但在每个匹配后,匹配一个空字符串。请参阅:https://regex101.com/r/sTmd9k/1

答案 1 :(得分:0)

获得一星级使用data, next := GiveRandomData(i) i = next

+

使用String replace2 = "chocolate".replaceAll("[a-z]+","*"); 也会找到空字符串