String s="a";
System.out.println(s.replaceAll(".*","1"));
为什么上面代码的输出是"11",而不是"1"?
因为*
匹配一个字符0次或更多次。使用+
,您应该会看到不同。
因为.*
匹配0长度匹配
改成.+
就好了
当你没有提到a的任何位置时,它会检查前后是否出现零。因此两个1被替换了。但是如果你为a提供一个位置,比如第一种情况那么在a之前只有一次出现0因此只有一次1被打印出来
String s="a";
System.out.println(s.replaceAll(".*a","1")); // prints 1
System.out.println(s.replaceAll(".*","1")); //prints 11
System.out.println(s.replaceAll("a.*","1")); //prints 1
*表示零次或多次出现前面的文本和。