2011-11-23 18 views
54

Potrzebuję metody, która może mi powiedzieć, czy ciąg ma nie alfanumeryczne znaki.Jak ustalić, czy ciąg ma niealfanumeryczne znaki?

Na przykład, jeśli ciąg znaków to "abcdef?" lub "abcdefà", metoda musi zwracać wartość true.

+1

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

+0

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

Odpowiedz

115

Korzystanie z Apache Commons Lang:

!StringUtils.isAlphanumeric(String) 

Alternativly iteracyjnego znaków String i skontaktować się z:

!Character.isLetterOrDigit(char) 

pan jeszcze jeden problem lewej: Twój przykład ciąg "abcdefà" jest alfanumeryczny, od à jest list. Ale myślę, że chcesz go uznać za niealfanumeryczny, prawda ?!

Więc może chcesz użyć wyrażenia regularnego zamiast:

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

Chciałbym uniknąć importowania zewnętrznych bibliotek, jeśli nie jest to absolutnie konieczne.A tak: chcę, aby uznać je za niealfanumeryczne – lugeno

4

Musisz przejść przez każdy znak w ciągu i sprawdzić Character.isDigit(char); lub Character.isletter(char);

Alternatywnie, można użyć wyrażenia regularnego.

+1

Na przykład "-1234" to liczba, a nie ciąg alfanumeryczny. Ale Twoja logika Character.isDigit zwróci wartość false dla "-". :( – Abhishek

1

Jeśli możesz korzystać z biblioteki Apache Commons, Commons-Lang StringUtils ma metodę o nazwie isAlphanumeric(), która robi to, czego szukasz.

21

Jednym ze sposobów jest to zrobić za pomocą klasy String siebie. Załóżmy, że ciąg jest coś takiego:

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

jedna jest użycie zewnętrznej biblioteki, takich jak Gmin Apache:

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

+1: regex jest tutaj zwycięzcą Myślę, że od czasu, gdy OP nie chce naprawdę sprawdzić znaki alfanumeryczne, chce czegoś takiego jak 'hasSpecialCharacters (String)' z własną definicją "special" –

+2

To nie będzie działać: 'String.matches (...)' w Javie sprawdza, czy wyrażenie regularne pasuje do * cały * ciąg. – ruakh

+1

Masz rację. Zmodyfikowałem wyrażenie regularne – loscuropresagio

1

string.matches("^\\W*$"); powinien robić to, co chcesz, ale to nie robi obejmują białe spacje. string.matches("^(?:\\W|\\s)*$"); również pasuje do białych znaków.

0

Możesz użyć statycznej metody isLetter (char c) klasy Character w Java.lang.

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

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

Funkcja ta służy do sprawdzenia, czy ciąg jest alfanumeryczny:

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

oszczędza konieczności importowania zewnętrznych bibliotek i kod może być łatwo modyfikowane należy później chcą wykonywać różne weryfikację na sznurkach .

Powiązane problemy