2011-11-23 218 views
54

我需要一種方法可以告訴我一個字符串是否包含非字母數字字符。如何確定一個字符串是否包含非字母數字字符?

例如,如果字符串是「abcdef?」或「abcdefà」,該方法必須返回true。

+1

http://stackoverflow.com/questions/1795402/java-check-a-string-if-there-is-a-special-character-in-it –

+0

http://stackoverflow.com/questions/11241690/regex-for-checking-if-a-string-is-strict-alphanumeric – treecoder

回答

115

使用Apache Commons Lang中:

!StringUtils.isAlphanumeric(String) 

Alternativly遍歷字符串的字符,並檢查:

!Character.isLetterOrDigit(char) 

你還有一個問題留給: 你舉的例子字符串 「abcdefà」 是字母數字,因爲à是一封信。但我認爲你希望它被認爲是非字母數字的,對吧?!

所以,你可能需要使用正則表達式來代替:

String s = "abcdefà"; 
Pattern p = Pattern.compile("[^a-zA-Z0-9]"); 
boolean hasSpecialChar = p.matcher(s).find(); 
+5

我想避免導入外部庫,如果不是絕對必要的。是的:我希望à被視爲非字母數字。 – lugeno

4

你必須要經過每一個字符字符串,並檢查Character.isDigit(char);Character.isletter(char);

或者,你可以使用正則表達式。

+1

例如,「-1234」是一個數字,而不是字母數字字符串。但是你的邏輯Character.isDigit將返回false爲「 - 」。 :( – Abhishek

1

如果您可以使用Apache Commons庫,那麼Commons-Lang StringUtils有一個名爲isAlphanumeric()的方法,它可以完成您正在尋找的任務。

21

一種方法是使用String類本身做。 比方說,你的字符串是類似的東西:

String s = "some text"; 
boolean hasNonAlpha = s.matches("^.*[^a-zA-Z0-9 ].*$"); 

另外一個是使用一個外部庫,比如Apache Commons:中

String s = "some text"; 
boolean hasNonAlpha = !StringUtils.isAlphanumeric(s); 
+0

+1:正則表達式在這裏是我認爲的贏家,因爲OP並不真正想檢查字母數字字符,他想要像'hasSpecialCharacters(String)'和他自己定義的「special」 –

+2

這不會起作用:Java中的String.matches(...)檢查正則表達式是否匹配*整個*字符串。 – ruakh

+1

你說得對。我修改了正則表達式 – loscuropresagio

1

string.matches("^\\W*$");應該做你想要什麼,但它不包括空格。 string.matches("^(?:\\W|\\s)*$");也匹配空格。

0

您可以在Java.lang中使用isLetter(char c)Character類的靜態方法。

public boolean isAlpha(String s) { 
    char[] charArr = s.toCharArray(); 

    for(char c : charArr) { 
     if(!Character.isLetter(c)) { 
      return false; 
     } 
    } 
    return true; 
} 
1

使用此功能來檢查一個字符串是否是字母:

public boolean isAlphanumeric(String str) 
{ 
    char[] charArray = str.toCharArray(); 
    for(char c:charArray) 
    { 
     if (!Character.isLetterOrDigit(c)) 
      return false; 
    } 
    return true; 
} 

它省去了導入外部庫和代碼可以很容易地修改你應該以後要執行對字符串不同的驗證檢查。

相關問題