2011-06-17 63 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。

相關問題