2011-06-17 65 views
0

我想搜索任何特殊字符在Java字符串。 这里是我的代码想要在字符串中搜索,如果有任何特殊字符

Pattern p = Pattern.compile("^[a-zA-Z0-9 ]"); 
    Matcher m = p.matcher("hgbs!hf862376"); 
    boolean b = m.matches(); 

    if (b == true) 
     System.out.println("sp. character is there"); 

但是,这是行不通的。 任何人都可以为此提出正确的正则表达式。 我想只允许a-z,A-Z和0-1。

预先感谢您。

+0

为什么你不接受任何问题的答案? – 2011-06-17 08:32:15

回答

3

.*[^a-zA-Z0-9 ].*代替^[a-zA-Z0-9 ]

^字符类中(即方括号中)的意思是否定的,因此任何但是列出的字符。如果不在字符类中,^表示字符串的开始。 您还需要在特殊字符之前或之后匹配任何内容。 因此,您的原始正则表达式只能匹配a-zA-Z0-9之间具有单个字母的字符串。

+0

Thanx为您的及时响应。我也尝试过这也,但它仍然不起作用 – user574557 2011-06-17 08:22:39

+0

你能给一个什么不工作的例子 – 2011-06-17 08:24:18

+0

哦,我看到 - 你需要匹配特殊字符前后的一切 - 我编辑我的答案 – 2011-06-17 08:27:22

0
Pattern p = Pattern.compile("^[a-zA-Z0-9]*$"); 
Matcher m = p.matcher("hgbs!hf862376"); 
boolean b = m.matches(); // looking for no special characters 

if (!b) { 
    System.out.println("sp. character is there"); 
} 
+1

这适用于我.....谢谢约翰.....再次感谢..... – user574557 2011-06-17 09:25:15

2

从JavaDoc中:

  • Matcher.matches()尝试来匹配图案中的整个输入序列。
  • Matcher.find()扫描输入序列,寻找与模式匹配的下一个子序列。

你应该使用Matcher.find()你是否在寻找一些符合某些规则的子字符串(即使是一个字符),如不是字母数字。

或者您可以使用Matcher.matches(),但是正则表达式模式应该是[a-zA-Z0-9 ]+,这意味着如果字符串只包含有效字符,则需要匹配。如果出现任何其他字符,那么matches()将返回false。

相关问题