¿Quiero comprobar que Java String o la matriz de caracteres no se compone solo de espacios en blanco, usando Java?
Esta es una pregunta muy similar, excepto que es Javascript:
¿Cómo puedo verificar si la cadena contiene caracteres y espacios en blanco, no solo espacios en blanco?
EDITAR : eliminé un poco sobre los caracteres alfanuméricos, por lo que tiene más sentido.
java
string
whitespace
Ankur
fuente
fuente
String.isBlank
API para lo mismo.Respuestas:
La solución más corta que se me ocurre:
Esto solo comprueba el espacio en blanco (no). Si desea verificar determinadas clases de caracteres, debe usar el poderoso
match()
con una expresión regular como:... que comprueba al menos un carácter alfanumérico (ASCII).
fuente
matches()
: para el rendimiento, generalmente almaceno elPattern
en unfinal static
. Paga si el mismo código se ejecuta con frecuencia.null
no es una cadena!"Usaría la biblioteca Lang de Apache Commons. Tiene una clase llamada StringUtils que es útil para todo tipo de operaciones de String. Para verificar si una cadena no es todos espacios en blanco, puede usar lo siguiente:
Aquí está la referencia: StringUtils.isBlank
fuente
StringUtils.isEmpty
ahora devolverá falso si pasa "".Ligeramente más corto que lo mencionado por Carl Smotricz:
fuente
https://commons.apache.org/proper/commons-lang/javadocs/api-release/org/apache/commons/lang3/StringUtils.html#isBlank-java.lang.CharSequence-
fuente
Si está utilizando Java 11 , el nuevo
isBlank
método de cadena será útil:Si está utilizando Java 8, 9 o 10 , puede crear una secuencia simple para verificar que una cadena no sea solo un espacio en blanco:
Además de no requerir bibliotecas de terceros, como Apache Commons Lang, estas soluciones tienen la ventaja de manejar cualquier carácter de espacio en blanco, y no solo
' '
espacios simples , como lo haría unatrim
solución basada en lo sugerido en muchas otras respuestas. Puede consultar los Javadocs para obtener una lista exhaustiva de todos los tipos de espacios en blanco admitidos. Tenga en cuenta que las cadenas vacías también están cubiertas en ambos casos.fuente
Tenga en cuenta el uso de la barra diagonal inversa cap-S, que significa "char no espacio en blanco"
Apuesto a que esta es la solución más simple (¿y quizás la más rápida?).
fuente
String year="1995"; year.matches("\\S"); will return false
entonces esta no es la solución correcta. : |Esta respuesta se centra más en la nota 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 la cadena sea
null
.Queremos
false
si (1) s estánull
o (2) s está vacío o (3) s solo contiene caracteres en blanco.fuente
Si solo está buscando espacios en blanco y no le importa nulo, puede usar org.apache.commons.lang.StringUtils.isWhitespace (String str),
StringUtils.isWhitespace(String str);
(Comprueba si la cadena contiene solo espacios en blanco).
Si también desea verificar nulo (incluido el espacio en blanco), entonces
fuente
Con Java-11 +, puede hacer uso de la
String.isBlank
API para verificar si la cadena dada no está compuesta de espacios en blanco:El javadoc para lo mismo es:
fuente
El método de recorte debería funcionar muy bien para usted.
http://download.oracle.com/docs/cd/E17476_01/javase/1.4.2/docs/api/java/lang/String.html#trim ()
Puede recortar y luego comparar con una cadena vacía o posiblemente verificar la longitud para 0.
fuente
Alternativa:
fuente
trim () y otras expresiones regulares mencionadas no funcionan para todos los tipos de espacios en blanco
es decir: Carácter Unicode 'SEPARADOR DE LÍNEA' http://www.fileformat.info/info/unicode/char/2028/index.htm
Funciones de Java Character.isWhitespace () cubre todas las situaciones.
Es por eso que ya se debe usar la solución StringUtils.isWhitespace (String) / o StringUtils.isBlank (String) .
fuente
comprobará: - es nulo - es solo espacio - es una cadena vacía ""
https://www.programcreek.com/java-api-examples/?class=com.mysql.jdbc.StringUtils&method=isEmptyOrWhitespaceOnly
fuente
Solo una comparación de rendimiento en openjdk 13, Windows 10. Para cada uno de estos textos:
ejecutó una de las siguientes pruebas:
cada 10,000,000 veces.
Los resultados:
Sorprendentemente, el trim + empty es el más rápido. Incluso si necesita construir el texto recortado. Aún más rápido que el simple bucle for buscando un solo carácter sin espacios en blanco ...
EDITAR: cuanto más largo sea el texto, más números difieren. Recortar texto largo lleva más tiempo que un simple bucle. Sin embargo, las expresiones regulares siguen siendo la solución más lenta.
fuente
Si bien personalmente preferiría
!str.isBlank()
, como otros ya sugirieron (ostr -> !str.isBlank()
como un predicado)str.trim()
, se usaría una versión más moderna y eficiente del enfoque mencionado anteriormente,str.strip()
considerando los nulos como "espacios en blanco":Por ejemplo, como Predicate, para usar con flujos, por ejemplo, en una prueba unitaria:
fuente