为什么使用replaceAll会从字符串中删除数字?

3
String foo = "a3#4#b";
String afterPunctutationRemoval = foo.replaceAll("[,.;:?!'-_\"/()\\{}]", "");
System.out.println(afterPunctutationRemoval);

当我运行这个程序时,它返回了"a##b",有人能解释一下为什么吗?

难道它不应该原样返回字符串吗?

3个回答

11

你的字符类包含范围'.._,它也匹配数字。

-放在字符类的开头或结尾:

foo.replaceAll("[,.;:?!'_\"/()\\{}-]", "")

或者转义它:

foo.replaceAll("[,.;:?!'\\-_\"/()\\{}]", "");

5

'-_ 匹配 '_ 之间的所有字符。


0

就像其他两个人说的那样,要转义-字符,使用\\-

另外,\\{{的结果相同,这是有意为之吗?如果不是,请尝试转义反斜杠-\\\\{


另外,应该返回"".字符应该评估为每个字符。 - m12

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接