Mah*_*leh 24 java regex string guava
我有一个来自UI的字符串,可能包含控制字符,我想删除除回车符,换行符和制表符之外的所有控制字符.
现在我可以找到两种方法来删除所有控制字符:
1-使用番石榴:
return CharMatcher.JAVA_ISO_CONTROL.removeFrom(string);
Run Code Online (Sandbox Code Playgroud)
2-使用正则表达式:
return string.replaceAll("\\p{Cntrl}", "");
Run Code Online (Sandbox Code Playgroud)
Nid*_*nan 23
如果要删除其他字符或控制单代码类别中的所有字符,可以执行此类操作
System.out.println(
"a\u0000b\u0007c\u008fd".replaceAll("\\p{Cc}", "")
); // abcd
Run Code Online (Sandbox Code Playgroud)
注意:这实际上从字符串中删除(以及其他)'\ u008f'Unicode字符,而不是转义形式的"%8F"字符串.
礼貌:polygenelubricants(替换Unicode控制字符)
Jon*_*eet 15
一种选择是使用CharMatchers 的组合:
CharMatcher charsToPreserve = CharMatcher.anyOf("\r\n\t");
CharMatcher allButPreserved = charsToPreserve.negate();
CharMatcher controlCharactersToRemove = CharMatcher.JAVA_ISO_CONTROL.and(allButPreserved);
Run Code Online (Sandbox Code Playgroud)
然后removeFrom像以前一样使用.我不知道它有多高效,但它至少是简单的.
这似乎是一种选择
String s = "\u0001\t\r\n".replaceAll("[\\p{Cntrl}&&[^\r\n\t]]", "");
for (char c : s.toCharArray()) {
System.out.print((int) c + " ");
}
Run Code Online (Sandbox Code Playgroud)
打印9 13 10就像你说的"除了回车,换行和标签".
使用这些
public static String removeNonAscii(String str)
{
return str.replaceAll("[^\\x00-\\x7F]", "");
}
public static String removeNonPrintable(String str) // All Control Char
{
return str.replaceAll("[\\p{C}]", "");
}
public static String removeSomeControlChar(String str) // Some Control Char
{
return str.replaceAll("[\\p{Cntrl}\\p{Cc}\\p{Cf}\\p{Co}\\p{Cn}]", "");
}
public static String removeControlCharFull(String str)
{
return removeNonPrintable(str).replaceAll("[\\r\\n\\t]", "");
}
Run Code Online (Sandbox Code Playgroud)