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

时间:2012-05-04 18:29:49

标签: java regex string replaceall

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

它给了我一个“## b”的结果,有人能解释我为什么吗?

不应该按原样返回字符串吗?

3 个答案:

答案 0 :(得分:11)

您的角色类包含的范围' .. _也匹配数字。

-放在角色类的开头或结尾:

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

或逃避它:

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

答案 1 :(得分:5)

'-_匹配'_之间的每个字符。

答案 2 :(得分:0)

就像其他两个人说的那样,逃避-字符 - \\-

此外,\\{评估与{相同,是否有意?如果没有,请尝试转义反斜杠 - \\\\{