空和null是两回事
前言 StringUtils
提示:这里可以添加本文要记录的大概内容:
StringUtils
是 Apache Commons Lang 库中提供的一个工具类,专为处理 java.lang.String
类型的对象而设计。这个类提供了大量静态方法,用于执行各种常见的字符串操作,如检查空值、空白字符处理、比较、查找、截取、转换、拆分、拼接、填充、修剪等。StringUtils
类旨在作为 Java 标准库中 String
类方法的补充,提供更加便捷、高效且 null 安全的字符串处理功能。
以下几个方面概括了 StringUtils
的核心特点和用途:
-
Null-safe 字符串操作:
StringUtils
方法通常会处理null
值输入,避免直接调用String
类方法时可能引发的NullPointerException
。例如,StringUtils.isEmpty(null)
会返回true
,而不是抛出异常。 -
空值与空白字符检查:
提供了一系列方法用于检查字符串是否为空、空字符串、仅包含空白字符或非空白字符:isEmpty(String str)
: 检查字符串是否为null
或长度为 0。isNotEmpty(String str)
: 恰好与isEmpty
相反,检查字符串是否非空(既不是null
也不是长度为 0)。isBlank(String str)
: 检查字符串是否为null
、长度为 0 或仅包含空白字符(如空格、制表符、换行符等)。isNotBlank(String str)
: 恰好与isBlank
相反,检查字符串是否非空且非空白。
-
字符串修剪:
提供了方法来去除字符串两端的空白字符:trim(String str)
: 返回去除两端空白字符后的字符串副本。trimToNull(String str)
: 去除两端空白字符,若结果为空字符串,则返回null
。trimToEmpty(String str)
: 去除两端空白字符,若输入为null
,则返回空字符串。
-
字符串比较:
提供了多种字符串比较方式,包括忽略大小写、忽略空白等:equals(String str1, String str2)
: 安全地比较两个字符串是否相等。equalsIgnoreCase(String str1, String str2)
: 同上,但忽略大小写。compare(String str1, String str2)
: 比较两个字符串的字典顺序,返回整数结果。
-
字符串拼接与拆分:
提供了替代String
类concat
方法的拼接方法,以及基于特定分隔符的字符串拆分方法:join(Object[] array, String separator)
: 将数组中的元素连接成一个字符串,用指定分隔符隔开。split(String str, String separatorChars)
: 根据给定的分隔符将字符串分割成一个字符串数组。
-
以及其他实用方法:
包括但不限于查找子字符串、提取子字符串、重复字符串、检查字符串是否以特定字符开头/结尾、转换字符串为驼峰式/下划线式等。
使用 StringUtils
类的主要优点在于其简化了字符串处理逻辑,增强了代码可读性,同时提供了对 null
值的安全处理,有助于减少潜在的运行时错误。在Java开发中,尤其是在处理用户输入、数据清洗、配置解析、日志记录、数据序列化与反序列化等场景中,StringUtils
类方法常被广泛应用。要使用这些方法,需确保已将 org.apache.commons:commons-lang3
库添加到项目的依赖中。
提示:以下是本篇文章正文内容,下面案例可供参考
当然可以,接下来我将通过代码示例进一步详细阐述Java中"空"和"null"的区别:
1. 空(empty):
字符串:
String emptyString = "";
System.out.println(emptyString.length()); // 输出:0
System.out.println(emptyString.isEmpty()); // 输出:true
以上代码创建了一个空字符串""
,其length()
方法返回0,表示没有包含任何字符。同时,isEmpty()
方法返回true
,进一步验证这是一个空字符串。
集合:
List<String> emptyList = new ArrayList<>();
System.out.println(emptyList.size()); // 输出:0
System.out.println(emptyList.isEmpty()); // 输出:true
Set<String> emptySet = new HashSet<>();
System.out.println(emptySet.size()); // 输出:0
System.out.println(emptySet.isEmpty()); // 输出:true
这里创建了两个空集合:一个空的ArrayList
和一个空的HashSet
。它们的size()
方法都返回0,表示没有包含任何元素。isEmpty()
方法均返回true
,确认它们是空集合。
2. null:
引用类型变量:
String nullString = null;
List<String> nullList = null;
try {
System.out.println(nullString.length()); // 抛出 NullPointerException
System.out.println(nullList.size()); // 抛出 NullPointerException
} catch (NullPointerException e) {
System.out.println("Caught NullPointerException");
}
上述代码中,nullString
和nullList
分别被赋值为null
。当试图调用它们的length()
和size()
方法时,会抛出NullPointerException
,因为它们并未指向任何实际对象。在实际编程中,需要通过条件判断或使用Objects.requireNonNull()
等方法来避免此类异常。
基本类型变量:
int primitiveInt = 0;
Integer objectInt = null;
System.out.println(primitiveInt); // 输出:0
System.out.println(objectInt); // 输出:null
这里展示了基本类型变量(primitiveInt
)与包装类型变量(objectInt
)的区别。基本类型变量不能取null
值,如primitiveInt
被赋值为0,输出其值为0。而包装类型变量可以取null
值,如objectInt
被赋值为null
,输出其值为null
。
3. isBlank
isBlank
包括了 empty
的检查范围,即 null 和空字符串
StringUtils.isBlank
:是空字符串、只包含空白字符
!StringUtils.isBlank
:非空字符串、不只包含空白字符
StringUtils.isBlank
是 Apache Commons Lang 库中提供的一个实用方法,用于判断给定的字符串是否为空白。这里的“空白”不仅包括空字符串(""
),还包括只包含空白字符(如空格、制表符、换行符等)的字符串。具体来说,StringUtils.isBlank
方法的行为如下:
-
空字符串 (
""
):如果输入的字符串长度为零(即没有任何字符),则认为是空白。 -
只包含空白字符的字符串:如果输入的字符串中所有字符都是空白字符,如空格(
' '
, ASCII 32)、制表符(\t
, ASCII 9)、换行符(\n
, ASCII 10)、回车符(\r
, ASCII 13)以及其他Unicode空白字符(如不间断空格、窄空格等),则认为是空白。 -
非空白字符串:如果输入的字符串包含至少一个非空白字符,则认为不是空白。
简而言之,StringUtils.isBlank
方法旨在检测一个字符串是否既无实质内容又无意义,即要么完全没有字符,要么全部由空白字符组成。在编程实践中,此方法常用于数据验证、清理或格式化,帮助开发者快速判断一个字符串是否需要进一步处理或是否可以视为无效输入。
使用示例:
import org.apache.commons.lang3.StringUtils;
public class Example {
public static void main(String[] args) {
String emptyString = "";
String whitespaceString = " ";
String nonEmptyString = "Hello, World!";
System.out.println(StringUtils.isBlank(emptyString)); // 输出:true
System.out.println(StringUtils.isBlank(whitespaceString)); // 输出:true
System.out.println(StringUtils.isBlank(nonEmptyString)); // 输出:false
}
}
在这个示例中,StringUtils.isBlank
分别判断了空字符串、只包含空白字符的字符串和非空白字符串,输出结果反映了它们是否被识别为空白。
总结:
通过上述代码示例,我们可以更直观地看到Java中"空"(empty)和"null"的区别:
- “空”(empty)表示容器(如字符串、集合等)内没有内容,它们是实际存在的对象,可以进行各种对象操作(如计算长度、检查是否为空等),但通常不包含有意义的数据。
- "null"表示引用没有指向任何对象,对
null
引用进行对象方法调用或属性访问会抛出NullPointerException
。在使用引用类型变量时,需要特别注意处理可能的null
值,以避免运行时异常。基本类型变量不能取null
值。
更多推荐
所有评论(0)