Como posso verificar se uma sequência não é nula e não está vazia?
public void doStuff(String str)
{
if (str != null && str != "**here I want to check the 'str' is empty or not**")
{
/* handle empty string */
}
/* ... */
}
java
string
string-comparison
Bernhard Barker
fonte
fonte
PreparedStatement
isso em vez de construir uma consulta SQL por primitivas de concatenação de cadeias. Evita todos os tipos de vulnerabilidades de injeção, muito mais legível, etc.Respostas:
E o isEmpty () ?
Certifique-se de usar as partes
&&
nesta ordem, porque o java não procederá para avaliar a segunda parte se a primeira&&
falhar, garantindo assim que você não receberá uma exceção de ponteiro nulo destr.isEmpty()
sestr
for nulo.Cuidado, ele só está disponível desde o Java SE 1.6. Você precisa verificar
str.length() == 0
as versões anteriores.Para ignorar o espaço em branco também:
(já que o Java 11
str.trim().isEmpty()
pode ser reduzido para ostr.isBlank()
qual também será testado para outros espaços em branco Unicode)Envolto em uma função útil:
Torna-se:
fonte
isEmpty()
parece exigir uma instância de String (não estática). Invocar isso em uma referência nula lançará uma NullPointerException.TextUtils.isEmpty(String)
para verificar se a string está vazia ou nula. Bom e curto. A classe TextUtils faz parte do Android SDK.(str != null && str.length() > 0)
.Use org.apache.commons.lang.StringUtils
Eu gosto de usar o Apache commons-lang para esse tipo de coisa, e especialmente a classe de utilitário StringUtils :
fonte
isEmpty
ouisBlank
, talvez não seja útil incluir uma biblioteca de terceiros. Você pode simplesmente criar sua própria classe de utilitário para fornecer esse método. No entanto, como Bozho explica, ocommons-lang
projeto fornece muitos métodos úteis!StringUtils.isNotBlank(str)
faz a verificação nula também.Basta adicionar o Android aqui:
fonte
Para adicionar ao @BJorn e ao @SeanPatrickFloyd A maneira do Guava de fazer isso é:
O Commons Lang às vezes é mais legível, mas eu tenho lentamente confiado mais na goiaba e, algumas vezes, o Commons Lang é confuso quando se trata
isBlank()
(como no que é espaço em branco ou não).A versão do Commons Lang da Guava
isBlank
seria:Vou dizer que o código que não permite
""
(vazio) Enull
é suspeito e potencialmente defeituoso, pois provavelmente não lida com todos os casos em que não é permitidonull
faz sentido (embora para o SQL eu possa entender como SQL / HQL é estranho''
).fonte
alternativamente
ou
Nota: A segunda verificação (primeira e segunda alternativas) assume que str não é nulo. Tudo bem apenas porque a primeira verificação está fazendo isso (e Java não faz a segunda verificação se a primeira é falsa)!
IMPORTANTE: NÃO use == para igualdade de string. == verifica se o ponteiro é igual, não o valor. Duas cadeias podem estar em endereços de memória diferentes (duas instâncias), mas têm o mesmo valor!
fonte
Quase todas as bibliotecas que conheço definem uma classe de utilitário chamada
StringUtils
,StringUtil
ouStringHelper
, e elas geralmente incluem o método que você está procurando.Meu favorito pessoal é o Apache Commons / Lang , onde na classe StringUtils , você obtém os dois(A primeira verifica se uma sequência é nula ou vazia, a segunda verifica se é nula, vazia ou apenas espaço em branco)
Existem classes de utilidade semelhantes no Spring, Wicket e muitas outras bibliotecas. Se você não usar bibliotecas externas, poderá introduzir uma classe StringUtils em seu próprio projeto.Atualização: muitos anos se passaram e hoje em dia eu recomendo o uso do método Guava
Strings.isNullOrEmpty(string)
.fonte
Isso funciona para mim:
fonte
E se:
fonte
&&
if str == null, impedindo uma NullPointerException. (Fonte: Eu apenas tentei)Use o método isNotBlank do Apache StringUtils como
Ele retornará true somente se o str não for nulo e não estiver vazio.
fonte
Você deve usar
org.apache.commons.lang3.StringUtils.isNotBlank()
ouorg.apache.commons.lang3.StringUtils.isNotEmpty
. A decisão entre esses dois se baseia no que você realmente deseja verificar.O isNotBlank () verifica se o parâmetro de entrada é:
O isNotEmpty () verifica apenas se o parâmetro de entrada está
fonte
Retorna verdadeiro ou falso com base na entrada
fonte
Se você não deseja incluir a biblioteca inteira; inclua o código que você deseja. Você terá que manter você mesmo; mas é uma função bastante direta. Aqui é copiado de commons.apache.org
fonte
É um pouco tarde demais, mas aqui está um estilo funcional de verificação:
fonte
Existe um novo método em java-11:
String#isBlank
Isso pode ser combinado com
Optional
para verificar se a string é nula ou vaziaString # isBlank
fonte
teste é igual a uma cadeia vazia e nulo na mesma condicional:
Não lança
NullPointerException
se str for nulo, poisObject.equals()
retorna false se arg fornull
.a outra construção
str.equals("")
jogaria o temidoNullPointerException
. Alguns podem considerar uma forma incorreta usando um literal String como o objetoequals()
chamado, mas ele faz o trabalho.Verifique também esta resposta: https://stackoverflow.com/a/531825/1532705
fonte
str != null
?!"".equals(str)
já faz o trabalho #Solução simples:
fonte
Como o seanizer disse acima, o Apache StringUtils é fantástico para isso, se você incluir a goiaba, faça o seguinte;
Também recomendo que você consulte as colunas em seu conjunto de resultados por nome e não por índice, isso facilitará a manutenção do seu código.
fonte
Eu criei minha própria função de utilitário para verificar várias strings de uma só vez, em vez de ter uma declaração if cheia de
if(str != null && !str.isEmpty && str2 != null && !str2.isEmpty)
. Esta é a função:para que eu possa simplesmente escrever:
fonte
areSet(String... strings)
pode ser invocada sem a criação da matriz:if(!StringUtils.areSet(firstName, lastName, address))
Caso esteja usando o Java 8 e deseje ter uma abordagem mais de Programação Funcional, é possível definir um
Function
que gerencia o controle e, em seguida, reutilizá-lo eapply()
sempre que necessário.Vindo para a prática, você pode definir o
Function
quantoEm seguida, você pode usá-lo simplesmente chamando o
apply()
método como:Se preferir, você pode definir um
Function
que verifique se oString
está vazio e depois negá-lo!
.Nesse caso, o
Function
será semelhante a:Em seguida, você pode usá-lo simplesmente chamando o
apply()
método como:fonte
Com o Java 8 Optional, você pode fazer:
Nesta expressão, você manipulará
String
s que também consistem em espaços.fonte
Você pode usar StringUtils.isEmpty (), resultará true se a string for nula ou vazia.
vai resultar em
str1 é nulo ou vazio
str2 é nulo ou vazio
fonte
isNotBlank
Eu recomendaria o Guava ou o Apache Commons de acordo com sua necessidade real. Verifique os diferentes comportamentos no meu código de exemplo:
Resultado:
Apache:
a está em branco
b está em branco
c está em branco
Google:
b é NullOrEmpty
c é NullOrEmpty
fonte
Se você estiver usando o Spring Boot, o código abaixo fará o trabalho
fonte
Para ser completo: se você já estiver usando a estrutura Spring , o StringUtils fornecerá o método
bem como o método
fonte
Simplesmente, também para ignorar o espaço em branco:
fonte
Se você usa o framework Spring, pode usar o método:
Este método aceita qualquer objeto como argumento, comparando-o com nulo e a string vazia. Como conseqüência, esse método nunca retornará true para um objeto não-nulo e não-String.
fonte
StringUtils
afirma explicitamente "Principalmente para uso interno dentro da estrutura; considere o Apache's Commons Lang para um conjunto mais abrangente de utilitários String".A melhor maneira de lidar com nulo na string é,
Em resumo,
fonte
Para verificar se todos os atributos de seqüência de caracteres em um objeto estão vazios (em vez de usar! = Null em todos os nomes de campos após a abordagem da API de reflexão de java
Este método retornaria true se todos os valores do campo String estivessem em branco. Retornaria false se algum valor estivesse presente nos atributos String.
fonte
Eu encontrei uma situação em que devo verificar se "nulo" (como uma string) deve ser considerado vazio. Também o espaço em branco e um nulo real devem retornar true. Finalmente resolvi a seguinte função ...
fonte
Caso você precise validar os parâmetros do seu método, você pode seguir o método simples
Exemplo:
fonte