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#isEmpty和String#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 。 此类带有isEmpty 、isBlank 等方法:
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。