用'*'替换所有

时间:2013-06-27 06:34:29

标签: java string replaceall

带有'*'值的

replaceAll会抛出异常。

我试过这个

String tmp = "M ******* k";

tmp = tmp.replaceAll("****","NOT");

System.out.println("TMP is :"+tmp);

我得到了这个例外

Exception in thread "main" java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 0

为什么replaceAll*有这种行为,我该如何克服这个问题呢?

6 个答案:

答案 0 :(得分:11)

replaceAll()中的第一个参数采用正则表达式。角色' *'在正则表达式中有特殊含义。

  

将此字符串中与给定正则表达式匹配的每个子字符串替换为给定的替换。

如果你想匹配文字character '*'.

,你必须逃避它

使用"\\*".

oracle forum on the same

答案 1 :(得分:4)

您可以查看此代码以供参考:

 public static void main (String[] args) 
    {
          String tmp = "M ******* k";

          tmp = tmp.replaceAll("\\*","NOT");

          System.out.println("TMP is :"+tmp);
    }

'*'是java中的正则表达式特殊字符。所以你需要遵循正则表达式的规则。

http://docs.oracle.com/javase/tutorial/essential/regex/quant.html

答案 2 :(得分:1)

尝试

tmp = tmp.replaceAll("\\*+","NOT");

More;

答案 3 :(得分:1)

尝试转义* s:

tmp = tmp.replaceAll("\\*\\*\\*\\*","NOT");

答案 4 :(得分:1)

tmp = tmp.replace("****","NOT"); // No regular expression
tmp = tmp.replaceAll("\\*\\*\\*\\*","NOT");

第二种选择是正则表达式。

答案 5 :(得分:1)

你试过逃避星号吗?正如PatternSyntaxException指出的那样,*是一个特殊字符,它需要一个字符类。

更合适的方法是:

tmp = tmp.replaceAll("\\*\\*\\*\\*", "NOT");