我有一个来自UI的字符串,其中可能包含控制字符,我想删除除 CARCERAICAR返回以外的所有控制字符strong>, TABS 。
现在,我可以找到两种删除所有控制字符的方法:
1-使用guava:
return CharMatcher.JAVA_ISO_CONTROL.removeFrom(string);
2-使用REGEX:
return string.replaceAll("\p{Cntrl}", "");
如果要删除其他字符或控制Uni-Code类别
,则可以执行这样的操作。System.out.println(
"au0000bu0007cu008fd".replaceAll("\p{Cc}", "")
); // abcd
注意:这实际上是从字符串中删除(除其他)' u008f'unicode字符,而不是逃逸的form"%8F"字符串。
礼貌:polygenelubricants(替换Unicode控制字符)
一个选项是使用CharMatcher
S:
CharMatcher charsToPreserve = CharMatcher.anyOf("rnt");
CharMatcher allButPreserved = charsToPreserve.negate();
CharMatcher controlCharactersToRemove = CharMatcher.JAVA_ISO_CONTROL.and(allButPreserved);
然后像以前一样使用removeFrom
。我不知道它有多高效,但至少很简单。
如编辑中所述,JAVA_ISO_CONTROL
现在已在Guava中弃用;javaIsoControl()
方法是首选。
这似乎是一个选项
String s = "u0001trn".replaceAll("[\p{Cntrl}&&[^rnt]]", "");
for (char c : s.toCharArray()) {
System.out.print((int) c + " ");
}
打印9 13 10
就像您说的"除了马车返回,线馈送和标签"。
使用这些
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
我正在使用硒来测试Web屏幕。我使用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"成为"。
使用apache commons lang。
StringUtils.deleteWhiteSpace(text)
你可以从春季使用stingutils:
String str = "ntttsome textttn";
StringUtils.trimAllWhitespace(str); // some text