【问题标题】:Remove all control characters from a Java string从 Java 字符串中删除所有控制字符
【发布时间】:2012-01-29 21:46:23
【问题描述】:

我有一个来自 UI 的字符串,其中包含控制字符,例如换行符和回车符。

我想做这样的事情:

String input = uiString.replaceAll(<regex for all control characters> , "")

这肯定以前做过!?

【问题讨论】:

    标签: java regex


    【解决方案1】:

    使用Guava,可能比使用完整的正则表达式引擎更高效,当然也更易读...

    return CharMatcher.JAVA_ISO_CONTROL.removeFrom(string);
    

    或者,只使用正则表达式,虽然不那么可读或有效......

    return string.replaceAll("\\p{Cntrl}", "");
    

    【讨论】:

    • 如何删除除回车换行制表符之外的所有控制字符。
    • 如果问题中已指定,我可能会回答,但我会用CharMatcher.anyOf("\r\n\t").removeFrom(string) 来回答。
    • 这里显示的replaceAll 咒语只获取ASCII控制字符;如果你也需要杀死 Unicode 的,请参阅my answer
    【解决方案2】:

    这样的事情应该可以解决问题:

    String newString = oldString.replaceAll("[\u0000-\u001f]", "");
    

    【讨论】:

    • -1;这甚至不包括所有 ASCII 控制字符; DEL 字符 (\u007F) 不在您指定的范围内。
    【解决方案3】:

    要仅删除 ASCII 控制字符,请使用 Cntrl character class

    String newString = string.replaceAll("\\p{Cntrl}", "");
    

    要删除 Unicode 称为“控制字符”的所有 65 个字符,请在 UNICODE_CHARACTER_CLASS 模式下使用 Cntrl 字符类,并带有 (?U) 标志:

    String newString = string.replaceAll("(?U)\\p{Cntrl}", "");
    

    要另外删除 unicode “格式”字符 - 例如用于使文本从右向左移动的控制字符或 soft hyphen - 还删除 Cf 字符类:

    String newString = string.replaceAll("(?U)\\p{Cntrl}|\\p{Gc=Cf}", "");
    

    【讨论】:

      【解决方案4】:

      Guava CharMatcher.JAVA_ISO_CONTROL 已弃用,请改用 javaIsoControl()

      CharMatcher.javaIsoControl().removeFrom(string);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-28
        • 2010-12-02
        • 2014-10-01
        • 1970-01-01
        • 2018-03-23
        相关资源
        最近更新 更多