0

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会有*这种行为,我该如何克服这个问题?

4

6 回答 6

11

replaceAll()中的第一个参数采用正则表达式。字符“*”在正则表达式中具有特殊含义。

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

所以你必须逃避它,如果你想匹配文字character '*'.

利用"\\*".

甲骨文论坛在同一

于 2013-06-27T06:36:32.397 回答
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

于 2013-06-27T06:46:16.887 回答
1

尝试

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

更多;

于 2013-06-27T06:36:39.843 回答
1

尝试转义*s:

tmp = tmp.replaceAll("\\*\\*\\*\\*","NOT");
于 2013-06-27T06:36:47.677 回答
1
tmp = tmp.replace("****","NOT"); // No regular expression
tmp = tmp.replaceAll("\\*\\*\\*\\*","NOT");

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

于 2013-06-27T06:37:33.170 回答
1

您是否尝试过转义星号?正如所PatternSyntaxException指出的,*是一个特殊字符,它之前需要一个字符类。

更合适的方法是:

tmp = tmp.replaceAll("\\*\\*\\*\\*", "NOT");
于 2013-06-27T06:37:38.227 回答