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

16

我从UI获取了一个包含控制字符(如换行和回车)的字符串。

我想做这样的事情:

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

这肯定已经被做过了吧!?

4个回答

27
使用Guava可能比使用完整的正则表达式引擎更有效,并且一定更易读...
return CharMatcher.JAVA_ISO_CONTROL.removeFrom(string);

另外,只使用正则表达式也可以实现相同的功能,尽管不够易读和高效。

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

3
如何移除所有控制字符,但保留回车、换行符和制表符? - Mahmoud Saleh
1
如果问题中有明确说明,我可能会回答那个问题,但是我会使用 CharMatcher.anyOf("\r\n\t").removeFrom(string) 来完成。 - Louis Wasserman
1
这里展示的 replaceAll 咒语只能获取 ASCII 控制字符;如果您还需要清除 Unicode 字符,可以参考我的答案 - Mark Amery

16

像这样应该可以解决问题:

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

1
-1;这甚至没有涵盖所有的ASCII控制字符;DEL字符(\u007F)不在您指定的范围内。 - Mark Amery

7

如果只想删除ASCII控制字符,请使用Cntrl字符类

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}", "");

1

Guava 的 CharMatcher.JAVA_ISO_CONTROL 已经被弃用,请使用 javaIsoControl() 替代:

CharMatcher.javaIsoControl().removeFrom(string);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接