Java 检查字符串是否不为null且不为空

Java 检查字符串是否不为null且不为空,java,string,string-comparison,java-11,Java,String,String Comparison,Java 11,如何检查字符串是否为空 public void doStuff(String str) { if (str != null && str != "**here I want to check the 'str' is empty or not**") { /* handle empty string */ } /* ... */ } 或者 str != null && !str.equals("") 或 注意:第

如何检查字符串是否为空

public void doStuff(String str)
{
    if (str != null && str != "**here I want to check the 'str' is empty or not**")
    {
        /* handle empty string */
    }
    /* ... */
}
或者

str != null && !str.equals("")

注意:第二次检查第一个和第二个选项假定str不为null。这是可以的,因为第一个检查就是这样做的,如果第一个检查为false,Java不会进行第二个检查

重要提示:不要使用==表示字符串相等检查指针是否相等,而不是值是否相等。两个字符串可以位于两个实例的不同内存地址中,但值相同

那么:

if(str!= null && str.length() != 0 )
那怎么办

请确保按此顺序使用&&的部分,因为如果&&的第一部分失败,java将不会继续计算第二部分,从而确保如果str为null,您不会从str.isEmpty获得null指针异常

注意,它只在JavaSE1.6之后才可用。在以前的版本中,必须检查str.length==0

要同时忽略空白,请执行以下操作:

if(str != null && !str.trim().isEmpty())
Function<String, Boolean> isNotEmpty = s -> s != null && !"".equals(s)
由于Java 11 str.trim.isEmpty可以缩减为str.isBlank,这也将测试其他Unicode空格

包装在一个方便的功能中:

public static boolean empty( final String s ) {
  // Null-safe, short-circuit evaluation.
  return s == null || s.trim().isEmpty();
}
if(!StringUtils.areSet(firstName,lastName,address)
{
    //do something
}
变成:

if( !empty( str ) )
使用 我喜欢将Apache用于这类事情,尤其是实用程序类:

import org.apache.commons.lang.StringUtils;

if (StringUtils.isNotBlank(str)) {
    ...
} 

if (StringUtils.isBlank(str)) {
    ...
} 

我所知道的几乎每个库都定义了一个名为StringUtils、StringUtil或StringHelper的实用程序类,它们通常包括您正在寻找的方法

我个人最喜欢的是,在课堂上,你可以同时获得

和 方法 第一个检查字符串是否为null或空,第二个检查字符串是否为null、空或仅为空白

Spring、Wicket和许多其他LIB中都有类似的实用程序类。如果不使用外部库,可能需要在自己的项目中引入StringUtils类。


更新:很多年过去了,现在我推荐使用的方法。

正如seanizer在上面所说的,ApacheStringutils在这方面非常棒,如果你要包括番石榴,你应该做以下几点

public List<Employee> findEmployees(String str, int dep) {
 Preconditions.checkState(StringUtils.isNotBlank(str), "Invalid input, input is blank or null");
 /** code here **/
}

我还建议您按名称而不是索引引用结果集中的列,这将使您的代码更易于维护。

使用Apache StringUtils的isNotBlank方法,如

StringUtils.isNotBlank(str)

只有当str不为null且不为空时,才会返回true。

要添加到@BJorn和@SeanPatrickFloyd,番石榴的方法是:

Strings.nullToEmpty(str).isEmpty(); 
// or
Strings.isNullOrEmpty(str);
Commons-Lang有时更具可读性,但我一直在慢慢地更多地依赖番石榴,有时Commons-Lang在isBlank(空白)方面会让人困惑,比如什么是空白

番石榴的Commons Lang isBlank版本是:

Strings.nullToEmpty(str).trim().isEmpty()

我会说,不允许空和空的代码是可疑的,并且可能存在错误,因为它可能无法处理所有不允许空的情况,尽管对于SQL,我可以理解为SQL/HQL很奇怪。

只是在这里添加Android:

import android.text.TextUtils;

if (!TextUtils.isEmpty(str)) {
...
}

如果你不想包括整个图书馆;只需包含您想要的代码即可。你必须自己维护它;但这是一个非常直接的函数。这是抄袭自


test等于一个空字符串,在同一条件中为null:

import com.google.common.base.Strings;

if (!Strings.isNullOrEmpty(myString)) {
       return myString;
}

如果str为null,则不会引发NullPointerException,因为如果arg为null,则返回false

另一个构造str.equals将抛出可怕的NullPointerException。有些人可能会考虑使用字符串文字作为坏的形式,称为等量的对象,但它执行任务。p> 也请检查以下答案:

这对我来说很有用:

public class StringUtils{

    public static boolean areSet(String... strings)
    {
        for(String s : strings)
            if(s == null || s.isEmpty)
                return false;

        return true;
    }   

}
如果给定字符串为null或为空字符串,则返回true

考虑使用nullToEmpty规范化字符串引用。如果你 如果要,可以使用String.isEmpty代替此方法,但不会 需要特殊的空安全形式的方法,如String.toUpperCase 任何一个或者,如果你想在另一个方向正常化, 将空字符串转换为null时,可以使用emptyToNull


我已经创建了自己的实用函数,可以一次检查多个字符串,而不是让if语句充满ifstr!=空&!str.isEmpty&&str2!=空&!我是空的。这就是功能:

public static boolean empty( final String s ) {
  // Null-safe, short-circuit evaluation.
  return s == null || s.trim().isEmpty();
}
if(!StringUtils.areSet(firstName,lastName,address)
{
    //do something
}
所以我可以简单地写:

 String str1 = "";
 String str2 = null;

 if(StringUtils.isEmpty(str)){
     System.out.println("str1 is null or empty");
 }

 if(StringUtils.isEmpty(str2)){
     System.out.println("str2 is null or empty");
 }

您可以使用StringUtils.isEmpty,如果字符串为null或空,则结果为true

import com.google.common.base.Strings;
import org.apache.commons.lang.StringUtils;

/**
 * Created by hu0983 on 2016.01.13..
 */
public class StringNotEmptyTesting {
  public static void main(String[] args){
        String a = "  ";
        String b = "";
        String c=null;

    System.out.println("Apache:");
    if(!StringUtils.isNotBlank(a)){
        System.out.println(" a is blank");
    }
    if(!StringUtils.isNotBlank(b)){
        System.out.println(" b is blank");
    }
    if(!StringUtils.isNotBlank(c)){
        System.out.println(" c is blank");
    }
    System.out.println("Google:");

    if(Strings.isNullOrEmpty(Strings.emptyToNull(a))){
        System.out.println(" a is NullOrEmpty");
    }
    if(Strings.isNullOrEmpty(b)){
        System.out.println(" b is NullOrEmpty");
    }
    if(Strings.isNullOrEmpty(c)){
        System.out.println(" c is NullOrEmpty");
    }
  }
}
将导致

str1为null或空

str!=null && !str.equalsIgnoreCase("null") && !str.isEmpty()
str2为null或空

您应该使用org.apache.commons.lang3.StringUtils.isNotBlank或org.apache.commons.lang3.StringUtils.isNotEmpty。这两者之间的决定是基于您实际想要检查的内容

str!=null && !str.equalsIgnoreCase("null") && !str.isEmpty()
检查输入参数是否为:

不为空, 不是空字符串 不是一个空格字符序列 仅检查输入参数是否正确

非空 不是空字符串
我会根据您的实际需要建议您使用番石榴或Apache Commons。检查示例代码中的不同行为:

private boolean stringNotEmptyOrNull(String st) {
    return st != null && !st.isEmpty();
}
结果: 阿帕奇: a是空白的 b是空白的 c是空白的 谷歌: b是空的 c是空的

简单解 :


为了完整性:如果您已经在使用Spring框架,则提供方法

返回: 如果字符串不为null且具有长度,则为true

以及方法

返回: 如果字符串不为null,其长度大于0,并且不仅包含空格,则为true


这有点太晚了,但这里有一种功能性的检查方式:

if (str == null || str.trim().length() == 0) {
    // str is empty
} else {
    // str is not empty
}

简单地说,也可以忽略空白:

if(str != null && !str.trim().isEmpty())
Function<String, Boolean> isNotEmpty = s -> s != null && !"".equals(s)

如果您使用的是Java8,并且希望采用更具功能性的编程方法,那么可以定义一个管理控件的函数,然后可以重用它并在需要时应用它

在实践中,您可以将函数定义为

如果愿意,您可以定义一个函数来检查字符串是否为空,然后用!对其求反

在这种情况下,函数将如下所示:

String emptyString = "";
!isEmpty.apply(emptyString); // this will return false

String notEmptyString = "StackOverflow";
!isEmpty.apply(notEmptyString); // this will return true

根据输入返回true或false

org.springframework.util.StringUtils.isEmpty(@Nullable Object str);

如果使用Spring框架,则可以使用以下方法:

public Boolean isStringCorrect(String str) {
    return Optional.ofNullable(str)
            .map(String::trim)
            .map(string -> !str.isEmpty())
            .orElse(false);
}
此方法接受任何对象作为参数,将其与null和空字符串进行比较。因此,对于非null非字符串对象,此方法将永远不会返回true。

使用,您可以执行以下操作:

jshell> "".isBlank()
$7 ==> true

jshell> " ".isBlank()
$8 ==> true

jshell> " ! ".isBlank()
$9 ==> false
在此表达式中,您还将处理由空格组成的字符串。

中有一个新方法:StringisBlank

如果字符串为空或仅包含空白代码点,则返回true,否则返回false

这可以与可选选项结合使用,以检查字符串是否为null或空

str!=null && !str.equalsIgnoreCase("null") && !str.isEmpty()

处理字符串中null的更好方法是

str.length()>0 && !str.equalsIgnoreCase("null")
总之,

private String name1;
private String name2;
private String name3;

public boolean isEmpty()  {

    for (Field field : this.getClass().getDeclaredFields()) {
        try {
            field.setAccessible(true);
            if (field.get(this) != null) {
                return false;
            }
        } catch (Exception e) {
            System.out.println("Exception occurred in processing");
        }
    }
    return true;
}

检查对象中的所有字符串属性是否为空而不是使用=遵循java反射api方法的所有字段名均为null

StringUtils.hasLength(str)

如果所有字符串字段值均为空,则此方法将返回true;如果字符串属性中存在任何一个值,则此方法将返回false;如果使用Spring Boot,则以下代码将执行此操作

public boolean isEmpty(String testString) {
  return ((null==testString) || "".equals((""+testString).trim()) || "null".equals((""+testString).toLowerCase()));
}

我遇到了一种情况,我必须检查null作为字符串必须视为空。此外,空格和实际null必须返回true。 我最终决定使用以下函数

public class StringUtils {

    static boolean anyEmptyString(String ... strings) {
        return Stream.of(strings).anyMatch(s -> s == null || s.isEmpty());
    }

}

如果需要验证方法参数,可以使用以下简单方法

public String concatenate(String firstName, String lastName) {
    if(StringUtils.anyBlankString(firstName, lastName)) {
        throw new IllegalArgumentException("Empty field found");
    }
    return firstName + " " + lastName;
}
例如:



您可能应该使用PreparedStatement之类的语句,而不是通过字符串连接原语构造SQL查询。避免了各种注入漏洞,可读性更高,等等。您可以创建类来检查空值或空对象。这将帮助您提高重用能力。。如果您可以使用isEmpty,Apache commons lang不是一个杀伤力过大的工具吗?只是好奇而已。@zengr-不,因为你肯定也会使用其他东西:@zengr的确,如果你只使用isEmpty或isBlank,那么包含第三方库可能是没有用的。您可以简单地创建自己的实用程序类来提供这种方法。然而,正如Bozho所解释的,commons lang项目提供了许多有用的方法!因为StringUtils.isNotBlankstr也会执行空检查。如果使用Spring框架,这可能已经绑定到框架的JAR中。不过,不需要使用guava的apache commons,guava中也有一个Strings类:我为新手Java用户添加了一些guava示例,用于回答这个问题:。请注意,isEmpty似乎需要一个非静态的字符串实例。对空引用调用此函数将引发NullPointerException。或ifstr!=空&!str.trim.isEmpty,若要忽略whitespace.iftxt.getText.length==0//get layoutI元素,建议使用TextUtils.isEmptyString检查字符串是否为空或null。又好又短。TextUtils类是Android SDK的一部分。@user1154390:有时为了清晰起见显式使用true和false是值得的,但当条件返回true表示true,false表示false时,它会带来不必要的复杂性。简单地说str!=null&&str.length>0。实际上,如果str在这里为null,则语句将返回truethat true,my bad!!相反,使用apache commons的StringUtils.isNotEmptystr将完成此任务。如果str为NULL,则抛出NullPointerException。@Mindwin这不是真的。它不会执行&&if str==null右边的代码,从而防止出现NullPointerException。资料来源:我刚刚改正了。不会出于羞耻而删除评论,这样扎克和乔就不会无缘无故地得到回应。哈哈。但是很高兴知道,如果您执行的不是测试内容,而是在跳过的方法调用上返回布尔值,那么这种跳过可能会导致逻辑失败。@Mindwin很高兴知道您使用的语言实际上是如何工作的。如果您不了解短路评估,请不要使用它,或者更好地了解它。最好使用签名:areSetString。。。然后可以在不创建数组的情况下调用字符串:if!StringUtils.areSetfirstName、lastName、addressOr只需使用isNotBlank com.google.guava guava 12.0@staticx,StringUtils方法在Lang 2.0版中发生了更改。信息技术
不再修剪字符序列。该功能在isBlank中可用。谢谢…str.length适合我。我的情况是,在从数据库查询之后,我从数组中获取值。即使数据是空的,当我计算str.length时,它也给出了1个长度。非常奇怪,但是谢谢你给我看这个。这和数据库的内部结构有关。要么它是一个char字段而不是varchar字段,因此用空格填充,要么数据库不喜欢空字符串。我想最好是在以后的应用程序数据访问中查询后/查询时预处理这些值。我认为检查长度比“等于”好,因为这是一个O1操作,因为在String.second Guava的情况下会缓存长度。番石榴遵循复数静态类的约定。对于字符串,请尝试使用静态方法(如isNullOrEmptystr)的字符串。我建议使用修剪映射,例如:Optional.ofNullablestr.mapString::trim.filterString::isEmpty.ifPresentthis::SetString方法;那么为什么要添加从未到达的代码str!=无效的Equalstr已经完成了这项工作。请注意,StringUtils的文档明确说明主要用于框架内的内部使用;考虑Apache的Con on Langar,以得到一个更全面的字符串应用程序。我们可以使用StringUtils.isEmptyparam方法。我想问一下为什么你现在推荐这个?我想知道Strings.isNullOrEmptystring和StringUtils之间是否有区别。isEmptyString@vicangelapachecommons方法充满了假设和我没有要求的东西。有了番石榴,我完全得到了我想要的东西,没有什么更多或更少。这就是我喜欢做的,当我担心性能成本或副作用,并且没有现成的进口产品时。
str.length()>0 && !str.equalsIgnoreCase("null")
private String name1;
private String name2;
private String name3;

public boolean isEmpty()  {

    for (Field field : this.getClass().getDeclaredFields()) {
        try {
            field.setAccessible(true);
            if (field.get(this) != null) {
                return false;
            }
        } catch (Exception e) {
            System.out.println("Exception occurred in processing");
        }
    }
    return true;
}
StringUtils.hasLength(str)
public boolean isEmpty(String testString) {
  return ((null==testString) || "".equals((""+testString).trim()) || "null".equals((""+testString).toLowerCase()));
}
public class StringUtils {

    static boolean anyEmptyString(String ... strings) {
        return Stream.of(strings).anyMatch(s -> s == null || s.isEmpty());
    }

}
public String concatenate(String firstName, String lastName) {
    if(StringUtils.anyBlankString(firstName, lastName)) {
        throw new IllegalArgumentException("Empty field found");
    }
    return firstName + " " + lastName;
}