我不知道如何在Java中从字符串中删除无效字符。 我试图删除所有不是数字,字母或()[]的字符。 我该怎么做?
谢谢
String foo = "this is a thing with & in it";
foo = foo.replaceAll("[^A-Za-z0-9()\\[\\]]", "");
Javadocs是你的好朋友。正则表达式也是你的好朋友。
编辑:
话虽如此,这只适用于拉丁字母表;您可以相应调整。如果适用于您的情况,\\w
可用于a-zA-Z
以表示“单词”字符,虽然它包括_
。
使用Guava,几乎肯定比正则表达式更高效(也更易读):
CharMatcher desired = CharMatcher.JAVA_DIGIT
.or(CharMatcher.JAVA_LETTER)
.or(CharMatcher.anyOf("()[]"))
.precomputed(); // optional, may improve performance, YMMV
return desired.retainFrom(string);
试试这个:
String s = "123abc&^%[]()";
s = s.replaceAll("[^A-Za-z0-9()\\[\\]]", "");
System.out.println(s);
"&^%"
,并仅在s
中保留"123abc[]()"
。Straße
改成Strae
。我想说这是一个相当“天真”的解决方法,抱歉,应该是“愚蠢”的解决方法 ;) - Voopublic static void main(String[] args) {
String c = "hjdg$h&jk8^i0ssh6+/?:().,+-#";
System.out.println(c);
Pattern pt = Pattern.compile("[^a-zA-Z0-9/?:().,'+/-]");
Matcher match = pt.matcher(c);
if (!match.matches()) {
c = c.replaceAll(pt.pattern(), "");
}
System.out.println(c);
}
String s = "Test[]"
s = s.replaceAll("[");
s = s.replaceAll("]");
您可以从用户端获取的字符串/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;
}
myString.replaceAll("[^\\w\\[\\]\\(\\)]", "");
replaceAll 方法将正则表达式作为第一个参数并替换所有匹配的字符串。这个正则表达式匹配所有非数字、字母或下划线 (\\w
) 和你需要的括号 (\\[\\]\\(\\)
) 的字符。
\w
,因为它包括下划线字符 _
- 这是根据问题无效的字符。 - Óscar López(
和 )
符号。 - leap123您可以根据ASCII表中字符的顺序指定要保留/删除的字符范围。正则表达式可以使用实际字符或字符十六进制代码:
// Example - remove characters outside of the range of "space to tilde".
// 1) using characters
someString.replaceAll("[^ -~]", "");
// 2) using hex codes for "space" and "tilde"
someString.replaceAll("[^\\u0020-\\u007E]", "");