2010-07-14 112 views
94

Quiero comprobar que Java String o matriz de caracteres no se compone solo de espacios en blanco, utilizando Java?¿Cómo puedo comprobar que Java String no es un espacio en blanco?

Esta es una pregunta muy similar, excepto que es Javascript:
How can I check if string contains characters & whitespace, not just whitespace?

EDIT: He quitado lo de caracteres alfanuméricos, por lo que tiene más sentido.

+3

Tener al menos un carácter alfanumérico no equivale a "no todos los espacios en blanco". Por ejemplo, "/ *" se ajusta a su factura y no tiene espacios en blanco. – Uri

+0

De hecho, incluso una cadena vacía "no está hecha solo de espacios en blanco". –

+3

Tenga en cuenta que hay muchas definiciones diferentes de espacios en blanco: http://spreadsheets.google.com/pub?clave = pd8dAQyHbdewRsnE5x5GzKQ ¿Qué es lo que quieres? O luego dices "tiene un carácter alfanumérico", que es algo completamente diferente. Por favor aclara –

Respuesta

176

solución más corta que puedo pensar:

if (string.trim().length() > 0) ... 

Este sólo comprueba el espacio en blanco (no). Si desea comprobar si determinadas clases de personajes, es necesario utilizar el poderoso match() con una expresión regular, tales como:

if (string.matches(".*\\w.*")) ... 

... que comprueba al menos un (ASCII) de caracteres alfanuméricos.

+6

FWIW: Esperaría que la primera solución sea considerablemente más rápida. –

+2

@Stephen C: ¡Absolutamente! Pero como señaló @Uri, tengo que resolver dos problemas diferentes gracias a la ambigüedad de la pregunta :) Además, rara vez uso 'matches()': para el rendimiento, generalmente almaceno el 'Pattern' en' final estático'. Paga si el mismo código se ejecuta con frecuencia. –

+0

@Carl - ¡cuidado, hay una 'cadena == nulo' en camino! - Ouch - NPE - eso duele ;-)) –

1

El método de ajuste debe trabajar grande para usted.

http://download.oracle.com/docs/cd/E17476_01/javase/1.4.2/docs/api/java/lang/String.html#trim()

Devuelve una copia de la cadena, con espacio inicial y final omitido. Si este objeto String representa un carácter vacío secuencia, o el primer y último caracteres de secuencia de caracteres representado por esta Cadena de objeto al mismo tiempo tienen códigos superiores a '\ u0020' (el personaje espacio), a continuación, una referencia a este objeto String es devuelto

De lo contrario, si no hay ningún carácter con un código mayor que '\ u0020' en la cadena, y un nuevo objeto String que representa una cadena vacía es creada y devuelta.

De lo contrario, sea k el índice de la primer carácter de la cadena cuyo código es mayor que '\ u0020', y vamos m el índice del último carácter en la cadena cuyo código es mayor que '\ u0020'. Un nuevo objeto String se creado, lo que representa la subcadena de esta cadena que comienza con el carácter en el índice k y termina con el carácter en el índice m, es decir, el resultado de this.substring (k, m + 1)

Este método se puede utilizar para recortar espacios en blanco desde el principio y el final de una cadena; de hecho, recorta todos los caracteres de control ASCII también.

Devuelve: Una copia de esta cadena con delantero y trasero espacio en blanco se quita o se esta cadena si no tiene principio o al final space.leading blanco o espacios en blanco finales.

Se puede recortar y luego comparar a una cadena vacía o comprobar la longitud de 0.

+0

El enlace en la respuesta está muerto - * 404 | Lo sentimos, la página no existe o ya no está disponible *. – Pang

43

me gustaría utilizar la biblioteca Apache Commons Lang posiblemente. Tiene una clase llamada StringUtils que es útil para todo tipo de operaciones de Cadenas. Para comprobar si una cadena no es todos los espacios en blanco, se puede utilizar el siguiente:

StringUtils.isBlank(<your string>) 

su referencia es: StringUtils.isBlank

+6

Prefiero esta solución en comparación con el uso de la respuesta elegida. Esto también comprobará la cadena == nulo – Richard

+0

Esto ahora es incorrecto. 'StringUtils.isEmpty' ahora devolverá falso si pasa" ". –

3

Esta respuesta se centra más en la anotación al margen "es decir, tiene al menos un carácter alfanumérico ". Además de eso, no agrega demasiado a la otra solución (anterior), excepto que no te hace daño con NPE en caso de que el String sea null.

Queremos false si (1) s es null o (2) s está vacío o (3) s contiene solo whitechars.

public static boolean containsNonWhitespaceChar(String s) { 
    return !((s == null) || "".equals(s.trim())); 
} 
1

alternativa:

boolean isWhiteSpaces(String s) { 
    return s != null && s.matches("\\s+"); 
} 
+1

\\ s * coincidirá con todas las cadenas con o sin espacios en blanco. Quizás te refieres a \\ s +? –

37

ligeramente más corto que lo que se mencionó por Carl Smotricz:

!string.trim().isEmpty(); 
+6

¡Ustedes jóvenes traficantes y su truco recién creado después de Java-1.6! En serio, al menos un proyecto en mi empresa todavía se ejecuta en Java 1.4 (suspiro). –

+0

Más corto? Sí. Personalmente, me gusta el estilo de codificación más detallado – Michel

5
if(target.matches("\\S")) 
    // then string contains at least one non-whitespace character 

Nota uso de back-slash Cap-S, que significa "no espacio en blanco char "

apostaría que esto es la solución más simple (¿y quizás la más rápida?).

+1

Intentemos: 'String year =" 1995 "; year.matches ("\\ S"); devolverá falso' Así que esta no es la solución correcta. : | –

+5

Nhat, estás en lo cierto, aunque no entiendo por qué. Según los documentos de Java, String.matches comprueba si una cadena determinada coincide con una expresión regular. Un poco de experimentación muestra que esto no es del todo exacto, ya que esta función parece coincidir SOLAMENTE si la expresión regular proporcionada coincide con la cadena COMPLETA. Por lo tanto, cambiar la expresión regular anterior ("\\ S") a "^. * \\ S. * $" Funcionará como se esperaba, aunque este comportamiento no está documentado correctamente y parece divergir sustancialmente de cualquier otra implementación de coincidencia de cadenas usando expresiones regulares. –

3

Si sólo está navegando por espacios en blanco y no se preocupan por nula, puede utilizar org.apache.commons.lang.StringUtils.isWhitespace (String str),

StringUtils.isWhitespace(String str);

(comprueba si la cadena contiene únicamente los espacios en blanco.)

Si también desea comprobar nula (incluyendo espacios en blanco) y luego

StringUtils.isBlank(String str); 
0

trim() y otros menti ONED expresión regular no funcionan para todo tipo de espacios en blanco

es decir: de caracteres Unicode 'línea de separación' http://www.fileformat.info/info/unicode/char/2028/index.htm

Java funciones Character.isWhitespace() cubre todas las situaciones.

Esa es la razón (String)/o StringUtils.isBlank (String) se debe utilizar ya mencionada solución StringUtils.isWhitespace.

Cuestiones relacionadas