1.摘要
在本文中,我们将介绍些方法检查Java中的空字符串(空的或空白符串)。我们有些语言的原生方法以及几个库可用。
2.空与空白(Empty&Blank)
对于知道字符串是否为空是很常见的问题。这里定义空字符串:是指空的或是零长度的字符串。如果一个字符串只有空白字符,我们也称之为空字符串。
对于Java而言,空白字符串如空格、制表符等。
具体详情可以参考Java API:
https://docs.oracle.com/javase/8/docs/api/java/lang/Character.html#isWhitespace-char-。
3.空字符串
3.1. Java 6及以上版本
如果使用JDK在Java 6及以上,那么检查空字符串的最简单方法是就是子字符串的isEmpty:
boolean isEmptyString(String string){ return string == null || string.isEmpty();}
如上为了确保null安全,我们在写判空函数时,添加了额外的null检查。
3.2. Java 5及以下版本
字符串的isEmpty方法是随Java 6引入的。对于Java 5及更低版本,我们可以使用字符串的length进行判断,自己写判空方法时,这样操作:
boolean isEmptyString(String string){ return string == null || string.length() == 0;}
从上代码可知,实际上,isEmpty 只是length的快捷方式。
4.空白字符串
字符串的isEmpty 和length 可用于检查是否为空字符串。如果我们想想检查是否为空白字符串,可以使用字符串的trim方法达到目的。
trim方法在执行判空前,会删除开头结尾的空白(空格)字符,我们可以这样来写空白字符串判定方法:
boolean isBlankString(String string) { return string == null || string.trim().isEmpty();}
确切地说,trim将删除Unicode代码小于或等于U+0020(「链接」)的所有前导和尾随字符。
我们知道String是不可变的,因此调用 trim 实际上不会改变底层字符串的。
5. Bean验证
检查空字符串的另一种方法是用正则表达式。这对于Java Bean验证来说非常方便:
@Pattern(regexp = "\\A(?!\\s*\\Z).+")String someString;
给定的正则表达式会确保空字符串或空白符串无效。
6.使用Apache Commons
如果可以添加依赖项,我们可以使用 Apache Commons Lang(Lang – Home)。这是个很有用的Java工具。
如果我们使用Maven,我们需要添加的公地lang3依赖 于我们的POM:
org.apache.commonsgroupId> commons-lang3artifactId>dependency>
除此之外,这个工具类库还提供了StringUtils 类,这个类带有像isEmpty,isBlank等方法:
StringUtils.isBlank(string)
此调用与我们自己的isBlankString方法相同。它是null安全的并且还检查空格。
7.使用Guava
另一很知名的类库是google的Guava所包含的字符串工具类。从版本23.1开始,有两种Guava:android 和jre。Android风格针对Android和Java 7,而JRE风格适用于Java 8。
如果我们不针对Android目标,我们可以将JRE风格的Guava添加到我们的pom中:
com.google.guavagroupId> guavaartifactId> 28.0-jreversion>dependency>
Guava的 Strings类附带了一个方法Strings.isNullOrEmpty:
Strings.isNullOrEmpty(string)
它检查给定字符串是null还是空的,但不检查全空白字符串。
8.总结
以上为几种方法来检查字符串是否为空。通常想检查字符串是否为空白的,这意味着它只包含空格字符。
最方便的方法是使用Apache Commons Lang,它提供诸如StringUtils.isBlank之类的帮助类。如果要坚持使用普通Java,我们可以将字符串原生的trim与isEmpty或length组合使用。对于Bean验证,可以使用正则表达式。