[英]How to remove control characters from java string?
我有一个来自 UI 的字符串,它可能包含控制字符,我想删除除回车、换行和制表符之外的所有控制字符。
现在我可以找到两种方法来删除所有控制字符:
1-使用番石榴:
return CharMatcher.JAVA_ISO_CONTROL.removeFrom(string);
2-使用正则表达式:
return string.replaceAll("\\p{Cntrl}", "");
System.out.println(
"a\u0000b\u0007c\u008fd".replaceAll("\\p{Cc}", "")
); // abcd
一种选择是使用CharMatcher
的组合:
CharMatcher charsToPreserve = CharMatcher.anyOf("\r\n\t");
CharMatcher allButPreserved = charsToPreserve.negate();
CharMatcher controlCharactersToRemove = CharMatcher.JAVA_ISO_CONTROL.and(allButPreserved);
然后像以前一样使用removeFrom
。 我不知道它的效率如何,但它至少很简单。
如编辑中所述, JAVA_ISO_CONTROL
现在在 Guava 中已弃用; 首选javaIsoControl()
方法。
String s = "\u0001\t\r\n".replaceAll("[\\p{Cntrl}&&[^\r\n\t]]", "");
for (char c : s.toCharArray()) {
System.out.print((int) c + " ");
}
使用这些
public static String removeNoneAscii(String str){
return str.replaceAll("[^\\x00-\\x7F]", "");
}
public static String removeNonePrintable(String str){ // All Control Char
return str.replaceAll("[\\p{C}]", "");
}
public static String removeOthersControlChar(String str){ // Some Control Char
return str.replaceAll("[\\p{Cntrl}\\p{Cc}\\p{Cf}\\p{Co}\\p{Cn}]", "");
}
public static String removeAllControlChars(String str)
{
return removeNonPrintable(str).replaceAll("[\\r\\n\\t]", "");
}
在 Java 正则表达式中,可以排除字符类中的某些字符。 这是一个示例程序,演示了类似的内容:
class test {
public static void main (String argv[]) {
String testStr="abcdefABCDEF";
System.out.println(testStr);
System.out.println(testStr.replaceAll("[\\p{Lower}&&[^cd]]",""));
}
}
它将产生以下输出:
abcdefABCDEF
cdABCDEF
我正在使用 Selenium 来测试网页屏幕。 我使用 Hamcrest 断言和匹配器根据各种条件在页面源中搜索不同的字符串。
String pageSource = browser.getPageSource();
assertThat("Text not found!", pageSource, containsString(text));
这在使用 IE 或 Firefox 驱动程序时工作得很好,但在使用 HtmlUnitDriver 时会出错。 HtmlUnitDriver 使用制表符、回车符和其他控制字符格式化页面源。 我在上面使用了 Nidhish Krishnan 巧妙回答的即兴演奏。 如果我“开箱即用”地使用 Nidish 的解决方案,我会留下额外的空格,所以我添加了一个名为 filterTextForComparison 的私有方法:
String pageSource = filterTextForComparison(browser.getPageSource());
assertThat("Text not found!", pageSource,
containsString(filterTextForComparison(text)));
和功能:
/**
* Filter out any characters embedded in the text that will interfere with
* comparing Strings.
*
* @param text
* the text to filter.
* @return the text with any extraneous character removed.
*/
private String filterTextForComparison(String text) {
String filteredText = text;
if (filteredText != null) {
filteredText = filteredText.replaceAll("\\p{Cc}", " ").replaceAll("\\s{2,}", " ");
}
return filteredText;
}
首先,该方法用空格替换控制字符,然后用一个空格替换多个空格。 我尝试使用 "\p{Cc}+?" 一次完成所有操作。 但它没有抓住 "\t " 变成 " "。
你可以使用 Spring 中的 StingUtils:
String str = "\n\t\t\tsome text\t\t\n";
StringUtils.trimAllWhitespace(str); // some text
使用来自Apache Commons Lang的StringUtils.deleteWhiteSpace(text)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.