如何从java字符串中删除控制字符?
我有一个来自 UI 的字符串,其中可能包含控制字符,并且我想删除除回车符、换行符和制表符之外的所有控制字符。
现在我可以找到两种方法来删除所有控制字符:
1-使用番石榴:
return CharMatcher.JAVA_ISO_CONTROL.removeFrom(string);
2- 使用正则表达式:
return string.replaceAll("\\p{Cntrl}", "");
我有一个来自 UI 的字符串,其中可能包含控制字符,并且我想删除除回车符、换行符和制表符之外的所有控制字符。
现在我可以找到两种方法来删除所有控制字符:
1-使用番石榴:
return CharMatcher.JAVA_ISO_CONTROL.removeFrom(string);
2- 使用正则表达式:
return string.replaceAll("\\p{Cntrl}", "");
如果要删除其他或控制单代码类别中的所有字符,则可以执行类似操作
System.out.println(
"a\u0000b\u0007c\u008fd".replaceAll("\\p{Cc}", "")
); // abcd
注意:这实际上从字符串中删除(其中包括)'\u008f'Unicode字符,而不是转义形式的“%8F”字符串。
图片提供: 多基因定义符 ( 替换 Unicode 控制字符 )
一种选择是使用 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