如何从Java字符串中删除控制字符



我有一个来自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

最新更新