2011-11-23 12 views
54

Necesito un método que pueda decirme si una Cadena tiene caracteres no alfanuméricos.¿Cómo determinar si una cadena tiene caracteres no alfanuméricos?

Por ejemplo, si la cadena es "abcdef?" o "abcdefà", el método debe devolver verdadero.

+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-alfanumérico – treecoder

Respuesta

115

El uso de Apache Commons Lang:

!StringUtils.isAlphanumeric(String) 

Alternativly iterar sobre los personajes de Cuerda y comprobar con:

!Character.isLetterOrDigit(char) 

te han todavía queda un problema: Su ejemplo de cadena "abcdefà" es alfanumérico, desde à es una carta. Pero creo que quieres que se lo considere no alfanumérico, ¿verdad?

Así que es posible que desee utilizar expresiones regulares en su lugar:

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

Me gustaría evitar la importación de librerías externas si no es estrictamente necesario. Y sí: quiero que se lo considere como no alfanumérico. – lugeno

4

usted tiene que ir a través de cada carácter de la cadena y comprobar Character.isDigit(char); o Character.isletter(char);

Como alternativa, puede utilizar expresiones regulares.

+1

Por ejemplo, "-1234" es un número, no una cadena alfanumérica. Pero su lógica Character.isDigit devolverá false para "-". :( – Abhishek

1

Si puede utilizar la biblioteca de Apache Commons, entonces Commons-Lang StringUtils tiene un método llamado isAlphanumeric() que hace lo que está buscando.

21

Un método consiste en hacer que el uso de la misma clase String. Digamos que su cadena es algo así:

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

otra es utilizar una biblioteca externa, tales como bienes comunes de Apache:

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

+1: regex es aquí el ganador, creo que ya que el OP no quiere verificar realmente caracteres alfanuméricos. Quiere algo como 'hasSpecialCharacters (String)' con su propia definición de "especial". –

+2

Eso no funcionará del todo: 'String.matches (...)' en Java comprueba si la expresión regular coincide con * cadena completa * – ruakh

+1

Tienes razón. Modifiqué la expresión regular – loscuropresagio

1

string.matches("^\\W*$"); debe hacer lo que quiera, pero no lo hace incluye espacios en blanco. string.matches("^(?:\\W|\\s)*$"); coincide con el espacio en blanco también.

0

Puede utilizar el método isLetter (char c) estático de la clase de caracteres en Java.lang.

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

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

Utilice esta función para comprobar si una cadena es alfanumérico:

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

Se evita así tener que importar bibliotecas externas y el código puede ser fácilmente modificada en caso de que más adelante desee llevar a cabo diferentes pruebas de validación en las cadenas .

Cuestiones relacionadas