基本上,我想知道是否有一个方便的类或方法来过滤不需要的字符的字符串。方法的输出应该是'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"
因为,我让清洁工知道'',''','#','&'和'_'是脏字符。我可以通过使用白色/黑色列表字符来解决它。但我不想重新发明轮子。
我想知道是否已经存在可以使用正则表达式“清理”字符串的事情。而不是自己写这个。
增加: 如果你认为清理一个字符串可以做得不同/更好,那么我当然也是耳朵
另外一个补充: - 它不仅适用于空间,也适用于任何类型的角色。
答案 0 :(得分:48)
根据您的更新进行编辑:
dirtyString.replaceAll("[^a-zA-Z0-9]","")
答案 1 :(得分:13)
如果您在项目中使用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)
,如上所述。
非常好用,功能强大的API。
答案 2 :(得分:9)
使用replaceAll
。
答案 3 :(得分:6)
这样做:
String dirtyString = "This contains spaces which are not allowed";
String result = dirtyString.replaceAll("\\s", "");
并使用'nothing'替换所有空格。
答案 4 :(得分:5)
String resultString = subjectString.replaceAll("\\P{L}+", "");
将替换所有非字母字符。
答案 5 :(得分:0)
我也更喜欢白名单方法。你永远都不会知道到底是什么。似乎比字符更多的编码。这样你可以控制它:
public String convert(String s) {
s = StringUtils.removePattern(s, "[^A-Za-zäöüÄÖÜß?!$,. 0-9\\-\\+\\*\\?=&%\\$§\"\\!\\^#:;,_²³°\\[\\]\\{\\}<>\\|~]'`'");
return s.trim();
}
这包含所有德语变音符号和法语口音......你知道 - 只需看看你的键盘。我想我已经把它们都拿走了。 随意省略特殊字符,如&lt; &GT;防止代码注入...