替换除空格之外的所有不可见控制字符和分隔符

时间:2014-05-26 08:50:46

标签: java string

我尝试清理传入的字符串(除了空格之外的不可见的控制字符和分隔符),但我无法清除所有字符串。仍然得到一些未清理的。我正在使用以下regex表达式:

String cleanedPart = codePart.trim().replaceAll("[\\p{Zl}\\p{Zp}\\p{C}]+", "");

我还有一个简单的junit测试:

assertEquals("one.two.thr%ee.fou rrr.bla", Cleaner.cleanupString(" one. two . thr%ee\n\t\r .fou rrr \t.bla "));
    assertEquals("one...two.thr%ee....", Cleaner.cleanupString(" one...two. thr%ee\n\t\r . ... "));
    assertEquals("one...two.thr%ee....", Cleaner.cleanupString("one\r...two.thr%ee.... "));
    assertEquals("onetwo", Cleaner.cleanupString("one\rtwo"));

    assertEquals("...one.two.three..four...", Cleaner.cleanupString("...one.two.three..four..."));

但是在我的直播系统中,我仍然得到一些带有“CR”的字符串,如第1行和第3行: enter image description here

这里有人有想法吗?

2 个答案:

答案 0 :(得分:3)

您使用的课​​程是我认为未定义的课程:Pattern

这个正则表达式怎么样:

// replace all control characters unless they are `\n\t\r`
// space is not a control character
.replaceAll("[\\p{Cntrl}&&[^\n\t\r]]", "");

甚至可能更严格。

// keeping only newline, carriage return, space, tab, and non-whitespace characters:
.replaceAll("[^\\S \n\r\t]", "");

答案 1 :(得分:2)

非常荒谬 - Mind .replaceAll("[\\p{Cntrl}&&[^\n\t\r]]", "");和我的.replaceAll("[\\p{Zl}\\p{Zp}\\p{C}]+", "");解决方案正常工作并且字符串得到清理。这是我代码中其他地方的导出问题!