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

2022-09-01 05:06:39

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

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

1-使用番石榴:

return CharMatcher.JAVA_ISO_CONTROL.removeFrom(string);

2- 使用正则表达式:

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

答案 1

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

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

注意:这实际上从字符串中删除(其中包括)'\u008f'Unicode字符,而不是转义形式的“%8F”字符串。

图片提供: 多基因定义符替换 Unicode 控制字符 )


答案 2

一种选择是使用 s 的组合:CharMatcher

CharMatcher charsToPreserve = CharMatcher.anyOf("\r\n\t");
CharMatcher allButPreserved = charsToPreserve.negate();
CharMatcher controlCharactersToRemove = CharMatcher.JAVA_ISO_CONTROL.and(allButPreserved);

然后像以前一样使用。我不知道它的效率如何,但它至少很简单。removeFrom


如编辑中所述,现在在番石榴中已弃用;javaIsoControl() 方法是首选。JAVA_ISO_CONTROL