如何检查一个字符串既不是 null
也不是空的?
public void doStuff(String str)
{
if (str != null && str != "**here I want to check the 'str' is empty or not**")
{
/* handle empty string */
}
/* ... */
}
如何检查一个字符串既不是 null
也不是空的?
public void doStuff(String str)
{
if (str != null && str != "**here I want to check the 'str' is empty or not**")
{
/* handle empty string */
}
/* ... */
}
那么 isEmpty() 方法呢?
if(str != null && !str.isEmpty())
请确保按照此顺序使用&&
的不同部分,因为如果&&
的第一个部分失败,Java将不会继续评估第二个部分,从而确保在str
为空时,您不会从str.isEmpty()
收到空指针异常。
请注意,此方法仅适用于Java SE 1.6及更高版本。在早期版本中,您需要检查str.length() == 0
。
要忽略空格:
if(str != null && !str.trim().isEmpty())
自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( !empty( str ) )
isEmpty()
方法需要一个字符串实例(非静态)。在空引用上调用此方法将抛出 NullPointerException
异常。 - James P.TextUtils.isEmpty(String)
来检查字符串是否为空或为 null。这一方法简短明了,并且 TextUtils 类是 Android SDK 的一部分。 - George Maisuradze(str != null && str.length() > 0)
即可。 - ToolmakerSteve我喜欢使用Apache commons-lang来完成这些任务,特别是它的StringUtils工具类:
import org.apache.commons.lang.StringUtils;
if (StringUtils.isNotBlank(str)) {
...
}
if (StringUtils.isBlank(str)) {
...
}
isEmpty
或isBlank
,也许不需要包含第三方库。你可以简单地创建自己的实用程序类来提供这样的方法。然而,正如Bozho所解释的那样,commons-lang
项目提供了许多有用的方法! - Romain LinsolasStringUtils.isNotBlank(str)
同时也会进行空值检查。 - sdescienceloverorg.apache.commons.lang3.StringUtils.isNotBlank
。 - javaPlease42在这里只是加入了Android:
import android.text.TextUtils;
if (!TextUtils.isEmpty(str)) {
...
}
补充@BJorn和@SeanPatrickFloyd的话,使用Guava的方法是:
Strings.nullToEmpty(str).isEmpty();
// or
Strings.isNullOrEmpty(str);
有时候Commons Lang更易读,但我已经逐渐更加依赖Guava,有时候Commons Lang在使用isBlank()
时会让人感到困惑(比如什么是空格或非空格)。
Guava的版本的Commons Lang isBlank
如下:
Strings.nullToEmpty(str).trim().isEmpty()
我认为写出不允许""
(空字符串) 和 null
的代码可能存在问题并且可能存在漏洞,因为它可能没有处理所有情况,其中不允许null
是有意义的(尽管对于SQL我可以理解,因为SQL/HQL对''
很奇怪)。
str != null && str.length() != 0
或者说
str != null && !str.equals("")
或者str != null && !"".equals(str)
注意:第二个检查(第一和第二种情况)假设str不为null。这样做是可以的,因为第一个检查已经做了这个判断(如果第一个检查为false,则Java不会执行第二个检查)!
重要提示:不要使用==来比较字符串相等性。==比较指针是否相等,而非值。两个字符串可以存在于不同的内存地址(两个实例),但具有相同的值!
StringUtils
、StringUtil
或StringHelper
,它们通常包括你要查找的方法。更新:多年过去了,现在我建议使用Guava的Strings.isNullOrEmpty(string)
方法。
这对我有效:
import com.google.common.base.Strings;
if (!Strings.isNullOrEmpty(myString)) {
return myString;
}
如果给定字符串为 null 或空字符串,则返回 true。在java-11中有一个新的方法:String#isBlank
如果字符串为空或仅包含空白代码点,则返回true,否则返回false。
jshell> "".isBlank()
$7 ==> true
jshell> " ".isBlank()
$8 ==> true
jshell> " ! ".isBlank()
$9 ==> false
Optional
结合使用,检查字符串是否为null或空。boolean isNullOrEmpty = Optional.ofNullable(str).map(String::isBlank).orElse(true);
{{link1:String#isBlank}}
可以这样试试:
if(str!= null && str.length() != 0 )
&&
右侧的代码,从而防止出现 NullPointerException 异常。(来源:我刚试过) - Zach Lysobey完整性考虑:如果您已经使用Spring框架,则StringUtils提供了该方法
org.springframework.util.StringUtils.hasLength(String str)
返回值: 如果字符串不为空且长度大于0,则返回true
同时还有该方法的说明:
org.springframework.util.StringUtils.hasText(String str)
PreparedStatement
等代替通过字符串连接原语构建 SQL 查询。这样可以避免各种注入漏洞,而且更易读等。 - polygenelubricantsPredicate.<String>isEqual(null).or(String::isEmpty).negate()
,具体解释请参考这里。 - Alexander Ivanchenko