2011-11-23 21 views
54

Ho bisogno di un metodo che possa dirmi se una stringa ha caratteri non alfanumerici.Come determinare se una stringa ha caratteri non alfanumerici?

Ad esempio se la stringa è "abcdef?" o "abcdefà", il metodo deve restituire 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-alfanumerico – treecoder

risposta

115

Utilizzo di Apache Commons Lang:

!StringUtils.isAlphanumeric(String) 

Alternativly un'iterazione su personaggi di stringa e controllare con:

!Character.isLetterOrDigit(char) 

quali hai ancora un problema a sinistra: Il vostro esempio stringa "abcdefà" è alfanumerico, dal à è una lettera. Ma penso tu voglia che sia considerato non alfanumerico, giusto ?!

Quindi si consiglia di usare l'espressione regolare invece:

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

Vorrei evitare di importare librerie esterne se non strettamente necessario E sì: voglio essere considerato come non alfanumerico – lugeno

4

si deve passare attraverso ogni carattere della stringa e verificare Character.isDigit(char); o Character.isletter(char);

In alternativa, è possibile utilizzare espressioni regolari.

+1

Ad esempio, "-1234" è un numero, non una stringa alfanumerica. Ma la tua logica Character.isDigit restituirà false per "-". :( – Abhishek

1

Se è possibile utilizzare la libreria Apache Commons, quindi Commons-Lang StringUtils ha un metodo chiamato isAlphanumeric() che fa ciò che si sta cercando.

21

Un approccio è quello di farlo utilizzando la classe String stesso. Diciamo che la stringa è qualcosa di simile:

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

un altro è quello di utilizzare una libreria esterna, come ad esempio beni comuni Apache:

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

+1: regex è qui il vincitore Penso che dal momento che l'OP non vuole veramente controllare caratteri alfanumerici: vuole la parola "hasSpecialCharacters (String)" con la sua definizione di "speciale". –

+2

Che non funziona: 'String.matches (...)' in Java controlla se l'espressione regolare corrisponde a * intero * stringa. – ruakh

+1

Hai ragione. Ho modificato la regex – loscuropresagio

1

string.matches("^\\W*$"); dovrebbe fare quello che vuoi, ma non lo fa includere gli spazi bianchi. string.matches("^(?:\\W|\\s)*$"); corrisponde allo spazio bianco.

0

È possibile utilizzare il metodo statico isLetter (char c) della classe Character in Java.lang.

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

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

Usare questa funzione per controllare se una stringa è alfanumerica:

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

fa risparmiare dover importare librerie esterne e il codice può essere facilmente modificato dovrebbe poi si desidera eseguire diversi controlli di convalida sulle stringhe .

Problemi correlati