【发布时间】:2012-01-29 21:46:23
【问题描述】:
我有一个来自 UI 的字符串,其中包含控制字符,例如换行符和回车符。
我想做这样的事情:
String input = uiString.replaceAll(<regex for all control characters> , "")
这肯定以前做过!?
【问题讨论】:
我有一个来自 UI 的字符串,其中包含控制字符,例如换行符和回车符。
我想做这样的事情:
String input = uiString.replaceAll(<regex for all control characters> , "")
这肯定以前做过!?
【问题讨论】:
使用Guava,可能比使用完整的正则表达式引擎更高效,当然也更易读...
return CharMatcher.JAVA_ISO_CONTROL.removeFrom(string);
或者,只使用正则表达式,虽然不那么可读或有效......
return string.replaceAll("\\p{Cntrl}", "");
【讨论】:
CharMatcher.anyOf("\r\n\t").removeFrom(string) 来回答。
replaceAll 咒语只获取ASCII控制字符;如果你也需要杀死 Unicode 的,请参阅my answer。
这样的事情应该可以解决问题:
String newString = oldString.replaceAll("[\u0000-\u001f]", "");
【讨论】:
\u007F) 不在您指定的范围内。
要仅删除 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}", "");
【讨论】:
Guava CharMatcher.JAVA_ISO_CONTROL 已弃用,请改用 javaIsoControl():
CharMatcher.javaIsoControl().removeFrom(string);
【讨论】: