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

16 java regex

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

我想做这样的事情:

String input = uiString.replaceAll(<regex for all control characters> , "")
Run Code Online (Sandbox Code Playgroud)

当然这已经做过了!?

Lou*_*man 25

使用Guava,可能比使用完整的正则表达式引擎更有效,当然更具可读性......

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

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

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

  • 如何删除除**回车**,**换行**和**标签**之外的所有控制字符. (3认同)

Mic*_*l W 15

像这样的东西应该做的伎俩:

String newString = oldString.replaceAll("[\u0000-\u001f]", "");
Run Code Online (Sandbox Code Playgroud)


Mar*_*ery 6

要仅删除 ASCII 控制字符,请使用Cntrl字符类

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

要删除 Unicode 称为“控制字符”的所有 65 个字符,请CntrlUNICODE_CHARACTER_CLASSmode 中使用字符类,并带有(?U)标志:

String newString = string.replaceAll("(?U)\\p{Cntrl}", "");
Run Code Online (Sandbox Code Playgroud)

要另外删除 unicode“格式”字符——比如用于使文本从右到左的控制字符,或软连字符——也可以取消Cf字符类:

String newString = string.replaceAll("(?U)\\p{Cntrl}|\\p{Gc=Cf}", "");
Run Code Online (Sandbox Code Playgroud)