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

466 java string string-comparison

如何检查字符串是否为空且不为空?

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

Col*_*ert 872

那么isEmpty()呢?

if(str != null && !str.isEmpty())
Run Code Online (Sandbox Code Playgroud)

请务必&&按此顺序使用部分,因为如果第一部分&&失败,java将不会继续评估第二部分,从而确保在str.isEmpty()if str为null时不会获得空指针异常.

请注意,它仅在Java SE 1.6之后可用.你必须检查str.length() == 0以前的版本.


要忽略空格:

if(str != null && !str.trim().isEmpty())
Run Code Online (Sandbox Code Playgroud)

(因为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();
}
Run Code Online (Sandbox Code Playgroud)

变为:

if( !empty( str ) )
Run Code Online (Sandbox Code Playgroud)

  • 请注意,`isEmpty()`似乎需要一个String实例(非静态).在空引用上调用此方法将抛出NullPointerException. (80认同)
  • 或者如果(str!= null &&!str.trim().isEmpty()),忽略空格. (38认同)
  • 我建议使用`TextUtils.isEmpty(String)`来检查字符串是空还是空.好又短.TextUtils类是Android SDK的一部分. (32认同)

Rom*_*las 204

使用org.apache.commons.lang.StringUtils

我喜欢使用Apache commons-lang来处理这些事情,尤其是StringUtils实用程序类:

import org.apache.commons.lang.StringUtils;

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

if (StringUtils.isBlank(str)) {
    ...
} 
Run Code Online (Sandbox Code Playgroud)

  • @zengr - 不,因为你肯定也会使用其他东西:) (17认同)
  • 如果你能使用isEmpty,那么Apache commons-lang是不是太过分了?只是好奇. (16认同)
  • 因为`StringUtils.isNotBlank(str)`也进行了空检查. (13认同)
  • 如果您使用 Spring Framework,这可能已经捆绑在框架的 jars 中。 (3认同)
  • @zengr的确,如果你只使用`isEmpty`或`isBlank`,那么包含第三方库可能没用.您只需创建自己的实用程序类即可提供此类方法.然而,正如Bozho解释的那样,`commons-lang`项目提供了许多有用的方法! (2认同)

phr*_*ead 103

只需在此处添加Android:

import android.text.TextUtils;

if (!TextUtils.isEmpty(str)) {
...
}
Run Code Online (Sandbox Code Playgroud)


Ada*_*ent 49

添加到@BJorn和@SeanPatrickFloyd Guava的方法是:

Strings.nullToEmpty(str).isEmpty(); 
// or
Strings.isNullOrEmpty(str);
Run Code Online (Sandbox Code Playgroud)

Commons Lang有时候更具可读性,但是我一直在慢慢依赖番石榴加上有时Commons Lang在涉及到时isBlank()(如在什么是空白的情况下)令人困惑.

番石榴版的Commons Lang isBlank将是:

Strings.nullToEmpty(str).trim().isEmpty()
Run Code Online (Sandbox Code Playgroud)

我会说不允许""(空)AND的代码 null是可疑的并且可能有错误,因为它可能无法处理所有不允许null有意义的情况(尽管对于SQL我可以理解为SQL/HQL很奇怪'').


hel*_*ios 33

str != null && str.length() != 0
Run Code Online (Sandbox Code Playgroud)

或者

str != null && !str.equals("")
Run Code Online (Sandbox Code Playgroud)

要么

str != null && !"".equals(str)
Run Code Online (Sandbox Code Playgroud)

注意:第二个检查(第一个和第二个备选方案)假定str不为空.这只是因为第一次检查是这样做的(如果第一次检查是假的,那么Java不会进行第二次检查)!

重要提示:请勿使用==进行字符串相等.==检查指针是否相等,而不是值.两个字符串可以位于不同的内存地址(两个实例)中,但具有相同的值!


Sea*_*oyd 25

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

我个人最喜欢的是Apache Commons/Lang,在StringUtils类中,你可以得到它们

  1. StringUtils.isEmpty(String)
  2. StringUtils.isBlank(String)方法

(第一个检查字符串是空还是空,第二个检查它是否为空,空或仅为空格)

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


更新:多年过去了,这些天我推荐使用番石榴Strings.isNullOrEmpty(string)方法.


Jav*_*tar 24

这对我有用:

import com.google.common.base.Strings;

if (!Strings.isNullOrEmpty(myString)) {
       return myString;
}
Run Code Online (Sandbox Code Playgroud)

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

考虑使用nullToEmpty规范化字符串引用.如果这样做,您可以使用String.isEmpty()而不是此方法,并且您也不需要特殊的空类安全形式的方法,如String.toUpperCase.或者,如果您想要"向另一个方向"规范化,将空字符串转换为null,则可以使用emptyToNull.

  • <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>12.0</version> </dependency> (2认同)

cod*_*ict 11

怎么样:

if(str!= null && str.length() != 0 )
Run Code Online (Sandbox Code Playgroud)

  • @Mindwin那不是真的.如果str == null,它将不会执行`&&`右边的代码,从而防止出现NullPointerException.(来源:我刚试过) (12认同)
  • @Mindwin很高兴知道您使用的语言是如何工作的。如果您不了解短路评估,请不要使用它,或者更好地了解它。 (2认同)

l00*_*0tr 10

为了完整起见:如果您已经在使用 Spring 框架,则StringUtils提供以下方法

org.springframework.util.StringUtils.hasLength(String str)
Run Code Online (Sandbox Code Playgroud)

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

以及方法

org.springframework.util.StringUtils.hasText(String str)
Run Code Online (Sandbox Code Playgroud)

返回:如果 String 不为 null、长度大于 0 并且不包含空格,则返回 true


Ant*_*iuc 9

有一个新方法:String#isBlank

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

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

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

jshell> " ! ".isBlank()
$9 ==> false
Run Code Online (Sandbox Code Playgroud)

这可以与Optional检查字符串是否为空或空结合使用

boolean isNullOrEmpty = Optional.ofNullable(str).map(String::isBlank).orElse(true);
Run Code Online (Sandbox Code Playgroud)

字符串#isBlank


A N*_*ter 7

使用Apache StringUtils的isNotBlank方法

StringUtils.isNotBlank(str)
Run Code Online (Sandbox Code Playgroud)

仅当str不为null且不为空时,它才会返回true.


gpr*_*ant 6

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

所述isNotBlank()检查该输入参数是:

  • 没有,
  • 不是空字符串("")
  • 不是空格字符序列("")

所述isNotEmpty()检查仅输入参数是

  • 不是空的
  • 不是空字符串("")


小智 5

如果你不想包括整个图书馆; 只需包含您想要的代码.你必须自己维护它; 但这是一个非常直接的功能.这里是从commons.apache.org复制的

    /**
 * <p>Checks if a String is whitespace, empty ("") or null.</p>
 *
 * <pre>
 * StringUtils.isBlank(null)      = true
 * StringUtils.isBlank("")        = true
 * StringUtils.isBlank(" ")       = true
 * StringUtils.isBlank("bob")     = false
 * StringUtils.isBlank("  bob  ") = false
 * </pre>
 *
 * @param str  the String to check, may be null
 * @return <code>true</code> if the String is null, empty or whitespace
 * @since 2.0
 */
public static boolean isBlank(String str) {
    int strLen;
    if (str == null || (strLen = str.length()) == 0) {
        return true;
    }
    for (int i = 0; i < strLen; i++) {
        if ((Character.isWhitespace(str.charAt(i)) == false)) {
            return false;
        }
    }
    return true;
}
Run Code Online (Sandbox Code Playgroud)


pil*_*lot 5

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

Optional.ofNullable(str)
    .filter(s -> !(s.trim().isEmpty()))
    .ifPresent(result -> {
       // your query setup goes here
    });
Run Code Online (Sandbox Code Playgroud)

  • 我建议使用地图进行修剪,例如:Optional.ofNullable(str) .map(String::trim) .filter(String::isEmpty) .ifPresent(this::setStringMethod); (2认同)

小智 5

根据输入返回true或false

Predicate<String> p = (s)-> ( s != null && !s.isEmpty());
p.test(string);
Run Code Online (Sandbox Code Playgroud)