如何使用正则表达式过滤掉不需要的字符的字符串?

基本上,我想知道是否有一个方便的类或方法来过滤不需要的字符串。 方法的输出应该是’clean’字符串。 即:

String dirtyString = "This contains spaces which are not allowed" String result = cleaner.getCleanedString(dirtyString); 

期待结果将是:

 "Thiscontainsspaceswhicharenotallowed" 

一个更好的例子:

 String reallyDirty = " this*is#a*&very_dirty&String" String result = cleaner.getCleanedString(dirtyString); 

我希望结果如下:

 "thisisaverydirtyString" 

因为,我让清洁工知道”,’*’,’#’,’&’和’_’是脏字符。 我可以通过使用白色/黑色列表字符来解决它。 但我不想重新发明轮子。

我想知道是否已经有这样的事情可以使用正则表达式“清理”字符串。 而不是自己写这个。

另外:如果您认为清洁弦乐可以以不同/更好的方式完成,那么我当然也是耳朵

另外一个补充: – 它不仅适用于空间,也适用于任何类型的角色。

根据您的更新编辑:

 dirtyString.replaceAll("[^a-zA-Z0-9]","") 

如果你在你的项目中使用guava (如果你不是,我相信你应该考虑它), CharMatcher类处理这个非常好:

你的第一个例子可能是:

 result = CharMatcher.WHITESPACE.removeFrom(dirtyString); 

而你的第二个可能是:

 result = CharMatcher.anyOf(" *#&").removeFrom(dirtyString); // or alternatively result = CharMatcher.noneOf(" *#&").retainFrom(dirtyString); 

或者如果你想更灵活地使用空格(制表符等),你可以将它们组合起来而不是编写自己的:

 CharMatcher illegal = CharMatcher.WHITESPACE.or(CharMatcher.anyOf("*#&")); result = illegal.removeFrom(dirtyString); 

或者您可以改为指定合法字符,这取决于您的要求可能是:

 CharMatcher legal = CharMatcher.JAVA_LETTER; // based on Unicode char class CharMatcher legal = CharMatcher.ASCII.and(CharMatcher.JAVA_LETTER); // only letters which are also ASCII, as your examples CharMatcher legal = CharMatcher.inRange('a', 'z'); // lowercase only CharMatcher legal = CharMatcher.inRange('a', 'z').or(CharMatcher.inRange('A', 'Z')); // either case 

其次是retainFrom(dirtyString) ,如上所示。

非常好,function强大的API。

使用replaceAll

这样做:

 String dirtyString = "This contains spaces which are not allowed"; String result = dirtyString.replaceAll("\\s", ""); 

并通过用’nothing’替换所有空格来工作。

 String resultString = subjectString.replaceAll("\\P{L}+", ""); 

将用任何东西替换任何非字母字符。

我也更喜欢白名单方法。 你永远不会知道到底是什么。 似乎比字符更多的编码。 这样你可以控制它:

 public String convert(String s) { s = StringUtils.removePattern(s, "[^A-Za-zäöüÄÖÜß?!$,. 0-9\\-\\+\\*\\?=&%\\$§\"\\!\\^#:;,_²³°\\[\\]\\{\\}<>\\|~]'`'"); return s.trim(); } 

这包含所有德国变音符号和法语口音……你知道 – 只需看看你的键盘。 我想我把它们都拿走了。 随意省略像<>这样的特殊字符以防止代码注入……