Quero verificar se o Java String ou o array de caracteres não é composto apenas de espaços em branco, usando Java?
Esta é uma pergunta muito semelhante, exceto que é Javascript:
Como posso verificar se a string contém caracteres e espaços em branco, não apenas espaços em branco?
Edição : Eu removi o bit sobre caracteres alfanuméricos, por isso faz mais sentido.
java
string
whitespace
Ankur
fonte
fonte
String.isBlank
API para o mesmo.Respostas:
Solução mais curta que consigo pensar:
Isso verifica apenas espaço em branco (não). Se você quiser verificar classes de caracteres específicas, precisará usar o poderoso
match()
com uma expressão regular como:... que verifica pelo menos um caractere alfanumérico (ASCII).
fonte
matches()
: para desempenho, eu costumo armazenar o arquivoPattern
em afinal static
. Vale a pena se o mesmo código for executado com frequência.null
não é uma string!"Eu usaria a biblioteca Apache Commons Lang. Possui uma classe chamada StringUtils, útil para todos os tipos de operações de String. Para verificar se uma String não é todos os espaços em branco, você pode usar o seguinte:
Aqui está a referência: StringUtils.isBlank
fonte
StringUtils.isEmpty
agora retornará false se você passar "".Um pouco mais curto do que o mencionado por Carl Smotricz:
fonte
https://commons.apache.org/proper/commons-lang/javadocs/api-release/org/apache/commons/lang3/StringUtils.html#isBlank-java.lang.CharSequence-
fonte
Se você estiver usando o Java 11 , o novo
isBlank
método de cadeia será útil:Se você estiver usando Java 8, 9 ou 10 , poderá criar um fluxo simples para verificar se uma sequência não é apenas espaço em branco:
Além de não exigir bibliotecas de terceiros, como o Apache Commons Lang, essas soluções têm a vantagem de manipular qualquer caractere de espaço em branco, e não apenas
' '
espaços simples , comotrim
sugeriria uma solução baseada em muitas outras respostas. Você pode consultar os Javadocs para obter uma lista exaustiva de todos os tipos de espaços em branco suportados. Observe que cadeias vazias também são abordadas nos dois casos.fonte
Observe o uso da barra invertida cap-S, que significa "caractere sem espaço em branco"
Aposto que essa é a solução mais simples (e talvez a mais rápida?).
fonte
String year="1995"; year.matches("\\S"); will return false
Portanto, essa não é a solução correta. : |Esta resposta se concentra mais na nota lateral ", ou seja, possui pelo menos um caractere alfanumérico ". Além disso, ele não adiciona muito à outra solução (anterior), exceto que não o prejudica com o NPE, caso a String seja
null
.Queremos
false
que (1) s sejanull
ou (2) s esteja vazio ou (3) s contenha apenas whitechars.fonte
Se você estiver verificando apenas o espaço em branco e não se importar com nulo, poderá usar org.apache.commons.lang.StringUtils.isWhitespace (String str),
StringUtils.isWhitespace(String str);
(Verifica se a String contém apenas espaço em branco.)
Se você também deseja procurar nulo (incluindo espaço em branco),
fonte
Com o Java-11 +, você pode usar a
String.isBlank
API para verificar se a sequência especificada não é toda composta de espaço em branco -O javadoc para o mesmo é:
fonte
O método de corte deve funcionar muito bem para você.
http://download.oracle.com/docs/cd/E17476_01/javase/1.4.2/docs/api/java/lang/String.html#trim ()
Você pode aparar e comparar com uma sequência vazia ou possivelmente verificar o comprimento como 0.
fonte
Alternativo:
fonte
trim () e outras expressões regulares mencionadas não funcionam para todos os tipos de espaços em branco
ou seja: Caractere Unicode 'LINE SEPARATOR' http://www.fileformat.info/info/unicode/char/2028/index.htm
Funções Java Character.isWhitespace () abrange todas as situações.
É por isso que a solução mencionada StringUtils.isWhitespace (String) / ou StringUtils.isBlank (String) deve ser usada.
fonte
irá verificar: - é nulo - é apenas espaço - é string vazia ""
https://www.programcreek.com/java-api-examples/?class=com.mysql.jdbc.StringUtils&method=isEmptyOrWhitespaceOnly
fonte
Apenas uma comparação de desempenho no openjdk 13, Windows 10. Para cada um desses textos:
executou um dos seguintes testes:
cada 10.000.000 vezes.
Os resultados:
Surpreendentemente, o trim + empty é o mais rápido. Mesmo que seja necessário construir o texto aparado. Ainda mais rápido que o loop for simples, procurando por um único caractere sem espaço em branco ...
EDIT: Quanto maior o texto, mais números diferem. O corte de texto longo leva mais tempo do que apenas um loop simples. No entanto, os regexs ainda são a solução mais lenta.
fonte
Enquanto pessoalmente eu preferiria
!str.isBlank()
, como outros já sugeriram (oustr -> !str.isBlank()
como predicado), uma versão mais moderna e eficiente dastr.trim()
abordagem mencionada acima, estaria usandostr.strip()
- considerando nulos como "espaço em branco":Por exemplo, como Predicado, para uso com fluxos, por exemplo, em um teste de unidade:
fonte