如何从java字符串中删除控制字符?

Mah*_*leh 24 java regex string guava

我有一个来自UI的字符串,可能包含控制字符,我想删除除回车符,换行符制表符之外的所有控制字符.

现在我可以找到两种方法来删除所有控制字符:

1-使用番石榴:

return CharMatcher.JAVA_ISO_CONTROL.removeFrom(string);
Run Code Online (Sandbox Code Playgroud)

2-使用正则表达式:

return string.replaceAll("\\p{Cntrl}", "");
Run Code Online (Sandbox Code Playgroud)

Nid*_*nan 23

如果要删除其他字符或控制单代码类别中的所有字符,可以执行此类操作

System.out.println(
    "a\u0000b\u0007c\u008fd".replaceAll("\\p{Cc}", "")
); // abcd
Run Code Online (Sandbox Code Playgroud)

注意:这实际上从字符串中删除(以及其他)'\ u008f'Unicode字符,而不是转义形式的"%8F"字符串.

礼貌:polygenelubricants(替换Unicode控制字符)

  • 这并没有达到作者想要的效果,他还想保留新行、换行符和制表符。上面的代码也将删除那些。 (2认同)
  • 至少用你自己的话来回答...... http://stackoverflow.com/a/3439206/2347824 (2认同)

Jon*_*eet 15

一种选择是使用CharMatchers 的组合:

CharMatcher charsToPreserve = CharMatcher.anyOf("\r\n\t");
CharMatcher allButPreserved = charsToPreserve.negate();
CharMatcher controlCharactersToRemove = CharMatcher.JAVA_ISO_CONTROL.and(allButPreserved);
Run Code Online (Sandbox Code Playgroud)

然后removeFrom像以前一样使用.我不知道它有多高效,但它至少是简单的.


Evg*_*eev 8

这似乎是一种选择

    String s = "\u0001\t\r\n".replaceAll("[\\p{Cntrl}&&[^\r\n\t]]", "");
    for (char c : s.toCharArray()) {
        System.out.print((int) c + " ");
    }
Run Code Online (Sandbox Code Playgroud)

打印9 13 10就像你说的"除了回车,换行和标签".


Ali*_*eri 8

使用这些

public static String removeNonAscii(String str)
{
    return str.replaceAll("[^\\x00-\\x7F]", "");
}

public static String removeNonPrintable(String str) // All Control Char
{
    return str.replaceAll("[\\p{C}]", "");
}

public static String removeSomeControlChar(String str) // Some Control Char
{
    return str.replaceAll("[\\p{Cntrl}\\p{Cc}\\p{Cf}\\p{Co}\\p{Cn}]", "");
}

public static String removeControlCharFull(String str)
{
    return removeNonPrintable(str).replaceAll("[\\r\\n\\t]", "");
}
Run Code Online (Sandbox Code Playgroud)