2012-02-04 54 views

回答

12
String foo = "this is a thing with & in it"; 
foo = foo.replaceAll("[^A-Za-z0-9()\\[\\]]", ""); 

的Javadoc是你的朋友。正则表达式也是你的朋友。

编辑:

这是西亚德,这只是拉丁字母;你可以相应地调整。 \\w可用于a-zA-Z表示一个“单词”字符,如果它适用于您的案例,虽然它包括_

+0

主要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

0

使用此代码:

String s = "Test[]" 
s = s.replaceAll("["); 
s = s.replaceAll("]"); 
+2

他会喜欢保留括号... – 2012-02-05 17:09:21

0

myString.replaceAll("[^\\w\\[\\]\\(\\)]", "");
的replaceAll方法接受一个正则表达式作为第一个参数,替换所有匹配字符串。此正则表达式匹配哪些不是数字,字母或下划线(\\w)的所有字符和括号,你需要(\\[\\]\\(\\)]

+0

使用'\ w'不会这样做,因为它包含根据问题,“_”字符是无效字符。 – 2012-02-04 20:26:09

+0

也许他只是忘记了下划线? – shift66 2012-02-04 20:29:27

+0

@ÓscarLópez - 不在我的Java和语言环境中。 – 2012-02-04 20:35:37

3

试试这个:

String s = "123abc&^%[]()"; 
s = s.replaceAll("[^A-Za-z0-9()\\[\\]]", ""); 
System.out.println(s); 

以上将样品字符串中删除字符"&^%",留下s只有"123abc[]()"

+3

取决于你对“数字”,“字母”等的定义。我当然不希望'Straße'被改为'Strae'。哎呀,我会说这是一个非常'天真'..对不起''解决方案;) – Voo 2012-02-04 20:27:24

+0

只是一个供参考,你不必逃避括号。 – 2012-02-04 20:36:24

+0

@BrianRoach谢谢,修复它。 – 2012-02-04 20:39:58

8

使用Guava,而且几乎肯定更高效(更易读)比正则表达式:

CharMatcher desired = CharMatcher.JAVA_DIGIT 
    .or(CharMatcher.JAVA_LETTER) 
    .or(CharMatcher.anyOf("()[]")) 
    .precomputed(); // optional, may improve performance, YMMV 
return desired.retainFrom(string); 
+5

不需要小心。这是一个Java库,仅此而已。 – 2012-02-04 21:18:00

+0

这不是你如何使用CharMatcher.or(),它只需要一个参数 – Stephan 2014-06-26 20:59:07

0

您可以从您的字符串/ 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; 
    }