如何检查字符串是否不为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 */
}
/* ... */
}
Answers:
那isEmpty()呢?
if(str != null && !str.isEmpty())
确保&&
按此顺序使用的部分,因为如果第一部分&&
失败,java将不会继续评估第二部分,因此确保您不会从str.isEmpty()
if str
为null时得到null指针异常。
当心,它仅从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()
似乎需要一个String实例(非静态)。在null引用上调用此方法将引发NullPointerException。
TextUtils.isEmpty(String)
检查字符串为空还是空。好又短。TextUtils类是Android SDK的一部分。
(str != null && str.length() > 0)
。
我喜欢将Apache commons-lang用于这类事情,尤其是StringUtils实用程序类:
import org.apache.commons.lang.StringUtils;
if (StringUtils.isNotBlank(str)) {
...
}
if (StringUtils.isBlank(str)) {
...
}
isEmpty
或isBlank
,则包括第三方库可能没有用。您可以简单地创建自己的实用程序类来提供这种方法。但是,正如Bozho解释的那样,该commons-lang
项目提供了许多有用的方法!
StringUtils.isNotBlank(str)
也进行null检查。
添加到@BJorn和@SeanPatrickFloyd Guava的方法是:
Strings.nullToEmpty(str).isEmpty();
// or
Strings.isNullOrEmpty(str);
Commons Lang有时更具可读性,但是我一直在慢慢地更多地依赖Guava,有时候,Commons Lang涉及到混乱isBlank()
(无论是否为空白)。
番石榴的Commons Lang版本为isBlank
:
Strings.nullToEmpty(str).trim().isEmpty()
我要说的代码,不允许""
(空)AND 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
,他们通常包括你正在寻找的方法。
我个人最喜欢的是Apache Commons / Lang,在 StringUtils类中,
(第一个检查字符串是否为null或为空,第二个检查字符串是否为null,为空或仅空格)
Spring,Wicket和许多其他库中有类似的实用程序类。如果您不使用外部库,则可能要在自己的项目中引入StringUtils类。
更新:很多年过去了,这些天我建议使用Guava的Strings.isNullOrEmpty(string)
方法。
这对我有用:
import com.google.common.base.Strings;
if (!Strings.isNullOrEmpty(myString)) {
return myString;
}
如果给定的字符串为null或为空字符串,则返回true。
考虑使用nullToEmpty标准化字符串引用。如果这样做,则可以使用String.isEmpty()代替此方法,并且您也不需要特殊的以空值表示形式的方法,例如String.toUpperCase。或者,如果您希望“从另一个方向”进行标准化,则将空字符串转换为null,则可以使用emptyToNull。
怎么样:
if(str!= null && str.length() != 0 )
&&
if str == null 右边的代码,从而防止了NullPointerException。(来源:我刚刚尝试过)
您应该使用org.apache.commons.lang3.StringUtils.isNotBlank()
或org.apache.commons.lang3.StringUtils.isNotEmpty
。两者之间的决定取决于您实际要检查的内容。
所述isNotBlank()检查该输入参数是:
所述isNotEmpty()检查仅输入参数是
如果您不想包括整个库;只需包含您想要的代码即可。您必须自己维护它;但这是一个非常简单的功能。这里是从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;
}
有一种新方法 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);
测试等于空字符串,并且在相同条件下为null:
if(!"".equals(str) && str != null) {
// do stuff.
}
NullPointerException
如果str为null,则不抛出Object.equals()
错误,因为如果arg为,则返回false null
。
另一个结构str.equals("")
会抛出恐惧NullPointerException
。有些人可能会认为使用String文字的不良形式equals()
是调用wich时的对象,但是它确实起作用。
还要检查此答案:https : //stackoverflow.com/a/531825/1532705
str != null
。!"".equals(str)
已经做好了工作
正如上面的seanizer所说,Apache StringUtils非常适合此操作,如果要包含番石榴,则应执行以下操作:
public List<Employee> findEmployees(String str, int dep) {
Preconditions.checkState(StringUtils.isNotBlank(str), "Invalid input, input is blank or null");
/** code here **/
}
我还可以建议您按名称而不是按索引引用结果集中的列,这将使您的代码更易于维护。
我制作了自己的实用程序函数来一次检查多个字符串,而不是使用充满了的if语句if(str != null && !str.isEmpty && str2 != null && !str2.isEmpty)
。这是功能:
public class StringUtils{
public static boolean areSet(String... strings)
{
for(String s : strings)
if(s == null || s.isEmpty)
return false;
return true;
}
}
所以我可以简单地写:
if(!StringUtils.areSet(firstName,lastName,address)
{
//do something
}
areSet(String... strings)
可以在不创建数组的情况下调用:if(!StringUtils.areSet(firstName, lastName, address))
如果您使用的是Java 8,并且希望拥有更多的函数式编程方法,则可以定义一个Function
管理控件的控件,然后可以apply()
在需要时重用它。
来到实践中,你可以定义Function
为
Function<String, Boolean> isNotEmpty = s -> s != null && !"".equals(s)
然后,您可以通过简单地调用以下apply()
方法来使用它:
String emptyString = "";
isNotEmpty.apply(emptyString); // this will return false
String notEmptyString = "StackOverflow";
isNotEmpty.apply(notEmptyString); // this will return true
如果愿意,可以定义一个Function
检查,如果String
为空,然后用取反!
。
在这种情况下,Function
将如下所示:
Function<String, Boolean> isEmpty = s -> s == null || "".equals(s)
然后,您可以通过简单地调用以下apply()
方法来使用它:
String emptyString = "";
!isEmpty.apply(emptyString); // this will return false
String notEmptyString = "StackOverflow";
!isEmpty.apply(notEmptyString); // this will return true
使用Java 8 Optional,您可以执行以下操作:
public Boolean isStringCorrect(String str) {
return Optional.ofNullable(str)
.map(String::trim)
.map(string -> !str.isEmpty())
.orElse(false);
}
在此表达式中,您还将处理String
由空格组成的。
您可以使用StringUtils.isEmpty(),如果字符串为null或为空,则结果为true。
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");
}
将导致
str1为null或为空
str2为null或为空
isNotBlank
我会根据您的实际需求建议Guava或Apache Commons。检查示例代码中的不同行为:
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");
}
}
}
结果:
Apache:
a为空白
b为空白
c为空白
Google:
b为NullOrEmpty
c为NullOrEmpty
出于完整性考虑:如果您已经在使用Spring框架,则StringUtils提供方法
org.springframework.util.StringUtils.hasLength(String str)
返回:如果String不为null且具有长度,则返回true
以及方法
org.springframework.util.StringUtils.hasText(String str)
返回:如果String不为null,其长度大于0,并且不仅包含空格,则返回true
简单来说,也要忽略空白:
if (str == null || str.trim().length() == 0) {
// str is empty
} else {
// str is not empty
}
如果使用Spring框架,则可以使用方法:
org.springframework.util.StringUtils.isEmpty(@Nullable Object str);
此方法接受任何Object作为参数,将其与null和空String进行比较。因此,对于非null非String对象,此方法将永远不会返回true。
StringUtils
明确指出“主要供框架内部使用;考虑使用Apache的Commons Lang获得更全面的String实用程序套件”。
处理字符串中null的更好方法是
str!=null && !str.equalsIgnoreCase("null") && !str.isEmpty()
简而言之,
str.length()>0 && !str.equalsIgnoreCase("null")
要检查对象中的所有字符串属性是否为空(请按照Java反射API方法在所有字段名称上使用!= 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;
}
如果所有String字段值均为空白,则此方法将返回true;如果String属性中存在任何一个值,则此方法将返回false。
如果您需要验证方法参数,可以使用以下简单方法
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查询。避免各种注入漏洞,更可读,等等