我从UI获取了一个包含控制字符(如换行和回车)的字符串。
我想做这样的事情:
String input = uiString.replaceAll(<regex for all control characters> , "")
这肯定已经被做过了吧!?
return CharMatcher.JAVA_ISO_CONTROL.removeFrom(string);
另外,只使用正则表达式也可以实现相同的功能,尽管不够易读和高效。
return string.replaceAll("\\p{Cntrl}", "");
像这样应该可以解决问题:
String newString = oldString.replaceAll("[\u0000-\u001f]", "");
\u007F
)不在您指定的范围内。 - Mark Amery如果只想删除ASCII控制字符,请使用Cntrl
字符类
String newString = string.replaceAll("\\p{Cntrl}", "");
UNICODE_CHARACTER_CLASS
模式下使用Cntrl
字符类,并加上(?U)
标志:String newString = string.replaceAll("(?U)\\p{Cntrl}", "");
Cf
字符类:String newString = string.replaceAll("(?U)\\p{Cntrl}|\\p{Gc=Cf}", "");
Guava 的 CharMatcher.JAVA_ISO_CONTROL 已经被弃用,请使用 javaIsoControl() 替代:
CharMatcher.javaIsoControl().removeFrom(string);
CharMatcher.anyOf("\r\n\t").removeFrom(string)
来完成。 - Louis WassermanreplaceAll
咒语只能获取 ASCII 控制字符;如果您还需要清除 Unicode 字符,可以参考我的答案。 - Mark Amery