【问题标题】:Why does replaceAll remove the numbers from the String?为什么 replaceAll 从字符串中删除数字?
【发布时间】:2012-05-04 18:29:48
【问题描述】:
String foo = "a3#4#b";
String afterPunctutationRemoval = foo.replaceAll("[,.;:?!'-_\"/()\\{}]", "");
System.out.println(afterPunctutationRemoval);

结果是“a##b”,有人能解释一下为什么吗?

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

【问题讨论】:

    标签: java regex string replaceall


    【解决方案1】:

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

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

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

    或逃避它:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        就像另外两个人说的,转义 - 字符 - \\-。

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

        【讨论】:

        • 另外,应该返回""。 . 字符应该对每个字符求值。
        猜你喜欢
        • 2013-06-06
        • 1970-01-01
        • 2014-09-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-05
        • 2017-05-19
        • 2013-06-24
        相关资源
        最近更新 更多