如何从字符串中删除无效字符?
String foo = "this is a thing with & in it";
foo = foo.replaceAll("[^A-Za-z0-9()\\[\\]]", "");
的Javadoc是你的朋友。正则表达式也是你的朋友。
编辑:
这是西亚德,这只是拉丁字母;你可以相应地调整。 \\w
可用于a-zA-Z
表示一个“单词”字符,如果它适用于您的案例,虽然它包括_
。
使用此代码:
String s = "Test[]"
s = s.replaceAll("[");
s = s.replaceAll("]");
他会喜欢保留括号... – 2012-02-05 17:09:21
myString.replaceAll("[^\\w\\[\\]\\(\\)]", "");
的replaceAll方法接受一个正则表达式作为第一个参数,替换所有匹配字符串。此正则表达式匹配哪些不是数字,字母或下划线(\\w
)的所有字符和括号,你需要(\\[\\]\\(\\)]
)
使用'\ w'不会这样做,因为它包含根据问题,“_”字符是无效字符。 – 2012-02-04 20:26:09
也许他只是忘记了下划线? – shift66 2012-02-04 20:29:27
@ÓscarLópez - 不在我的Java和语言环境中。 – 2012-02-04 20:35:37
试试这个:
String s = "123abc&^%[]()";
s = s.replaceAll("[^A-Za-z0-9()\\[\\]]", "");
System.out.println(s);
以上将样品字符串中删除字符"&^%"
,留下s
只有"123abc[]()"
。
取决于你对“数字”,“字母”等的定义。我当然不希望'Straße'被改为'Strae'。哎呀,我会说这是一个非常'天真'..对不起''解决方案;) – Voo 2012-02-04 20:27:24
只是一个供参考,你不必逃避括号。 – 2012-02-04 20:36:24
@BrianRoach谢谢,修复它。 – 2012-02-04 20:39:58
使用Guava,而且几乎肯定更高效(更易读)比正则表达式:
CharMatcher desired = CharMatcher.JAVA_DIGIT
.or(CharMatcher.JAVA_LETTER)
.or(CharMatcher.anyOf("()[]"))
.precomputed(); // optional, may improve performance, YMMV
return desired.retainFrom(string);
不需要小心。这是一个Java库,仅此而已。 – 2012-02-04 21:18:00
这不是你如何使用CharMatcher.or(),它只需要一个参数 – Stephan 2014-06-26 20:59:07
您可以从您的字符串/ URL或者你从用户端得到任何请求参数删除特价字符
public static String removeSpecialCharacters(String inputString){
final String[] metaCharacters = {"../","\\..","\\~","~/","~"};
String outputString="";
for (int i = 0 ; i < metaCharacters.length ; i++){
if(inputString.contains(metaCharacters[i])){
outputString = inputString.replace(metaCharacters[i],"");
inputString = outputString;
}else{
outputString = inputString;
}
}
return outputString;
}
主要Java正则表达式引用:[java.util.regex.Pattern](https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html) – etech 2016-07-12 14:40:33