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;
}