如何使用正则表达式过滤掉不需要的字符的字符串?
基本上,我想知道是否有一个方便的类或方法来过滤不需要的字符串。 方法的输出应该是’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(); }
这包含所有德国变音符号和法语口音……你知道 – 只需看看你的键盘。 我想我把它们都拿走了。 随意省略像<>这样的特殊字符以防止代码注入……