从Java字符串中删除所有控制字符

时间:2012-01-29 21:46:24

标签: java regex

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

我想做这样的事情:

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

以前这已经做过了!?

4 个答案:

答案 0 :(得分:24)

使用Guava,可能比使用完整的正则表达式引擎效率更高,而且更具可读性......

return CharMatcher.JAVA_ISO_CONTROL.removeFrom(string);

或者,只是使用正则表达式,尽管不是那么可读或有效......

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

答案 1 :(得分:15)

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

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

答案 2 :(得分:4)

要仅删除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}", "");

答案 3 :(得分:0)

不推荐使用 Guava CharMatcher.JAVA_ISO_CONTROL,请改用 javaIsoControl()

CharMatcher.javaIsoControl().removeFrom(string);