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

结果它给了我“a##b”,有人可以解释一下为什么吗?

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

4

3 回答 3

11

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

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

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

或逃避它:

foo.replaceAll("[,.;:?!'\\-_\"/()\\{}]", "");
于 2012-05-04T18:32:52.060 回答
5

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

于 2012-05-04T18:32:40.693 回答
0

就像另外两个人说的那样,逃避-角色—— \\-

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

于 2012-05-07T08:03:04.663 回答