我尝试清理传入的字符串(除了空格之外的不可见的控制字符和分隔符),但我无法清除所有字符串。仍然得到一些未清理的。我正在使用以下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行:
这里有人有想法吗?
答案 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}]+", "");
解决方案正常工作并且字符串得到清理。这是我代码中其他地方的导出问题!