Contents

Java中空或空白字符串检查

1. 简介

在本教程中,我们将介绍一些在 Java 中检查空字符串的方法。我们有一些本地语言方法以及几个库。

2. 空与空白

当然,知道字符串何时为空或空白是很常见的,但让我们确保我们与我们的定义在同一页面上。 如果字符串为null或没有任何长度的字符串,我们认为该字符串为null。如果一个字符串只包含空格,那么我们称之为空白。

对于 Java,空格是空格、制表符等字符。看看Character.isWhitespace 的例子。

3. 空字符串

3.1. 使用 Java 6 及更高版本

如果我们至少在 Java 6 上,那么检查字符串的最简单方法是String#isEmpty

boolean isEmptyString(String string) {
    return string.isEmpty();
}

为了使其也是空安全的,我们需要添加一个额外的检查:

boolean isEmptyString(String string) {
    return string == null || string.isEmpty();
}

3.2. 使用 Java 5 及更低版本

String#isEmpty是在 Java 6 中引入的。对于 Java 5 及更低版本,我们可以使用String#length 代替。

boolean isEmptyString(String string) {
    return string == null || string.length() == 0;
}

事实上,String#isEmpty只是String#length的一个快捷方式。**

4. 空白字符串

String#isEmptyString#length都可用于检查null字符串。

如果我们还想检测空白字符串,我们可以借助String#trim来实现。它将在执行检查之前删除所有前导和尾随空格。

boolean isBlankString(String string) {
    return string == null || string.trim().isEmpty();
}

准确地说,String#trim将删除所有Unicode 代码小于或等于 U+0020 的前导和尾随字符。

还要记住String是不可变的,所以调用 trim不会真正改变底层字符串。

除了上述方法,**从 Java 11 开始,我们还可以使用 isBlank() 方法代替 trimming

boolean isBlankString(String string) {
    return string == null || string.isBlank();
}

*isBlank()*方法也更有效率,因为它不会在堆上创建新的 字符串。因此,如果我们使用的是 Java 11 或更高版本,这是首选方法。

5. Bean 验证

另一种检查空白字符串的方法是正则表达式。这很方便,例如Java Bean Validation

@Pattern(regexp = "\\A(?!\\s*\\Z).+")
String someString;

给定的正则表达式确保空或空白字符串不会被验证。

6. 使用 Apache Commons

如果可以添加依赖,我们可以使用Apache Commons Lang 。这有许多 Java 助手。 如果我们使用 Maven,我们需要将commons-lang3 依赖添加到我们的 pom 中:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
</dependency>

除其他外,这给了我们StringUtils 。 此类带有isEmptyisBlank 等方法:

StringUtils.isBlank(string)

这个调用和我们自己的isBlankString方法一样。它是空安全的,并且还检查空格。

7. Guava

另一个带来某些字符串相关实用程序的知名库是 Google 的Guava 。从 23.1 版本开始,Guava 有两种风格:android 和jre。Android 风格面向 Android 和 Java 7,而 JRE 风格面向 Java 8。

如果我们不针对 Android,我们可以将JRE 风格 添加到我们的 pom 中:

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>31.0.1-jre</version>
</dependency>

Guavas Strings 类带有一个方法Strings.isNullOrEmpty

Strings.isNullOrEmpty(string)

它会检查给定的字符串是 null 还是空,但不会检查 whitespace-only strings