繁体   English   中英

检查字符串是否为空的更好方法是在 Java 5/6 中使用 String.trim().length() 吗?

[英]What's the better way to check if a String is empty than using String.trim().length() in Java 5/6?

在 Java5/6 中可能有一种方法可以返回字符串中第一个非空白字符的索引。 但我再也找不到它了。 代码分析工具说它比检查String.trim().length()更好。

我总是喜欢使用 Apache Commons StringUtils 库。 它有 isEmpty() 和 isBlank() 处理空白。

http://commons.apache.org/lang/api-2.5/org/apache/commons/lang/StringUtils.html

更不用说 class 和一般库中的许多其他有用的方法。

我会使用番石榴CharMatcher class:

boolean onlyWhitespace = CharMatcher.WHITESPACE.matchesAllOf(input);

好的,我终于从InefficientEmptyStringCheck的 PMD 规则中找到了它:

低效的EmptyStringCheck:
自:PMD 3.6
String.trim().length() 是一种检查字符串是否真的为空的低效方法,因为它创建一个新的字符串 object 只是为了检查它的大小。 考虑创建一个循环字符串的 static function,检查每个字符的 Character.isWhitespace() 并在找到非空白字符时返回 false。

这只是 PMD 的建议。 采用与否取决于哪个优先:程序的效率或程序员的时间。

Java 11 介绍了“isBlank”方法。 请参阅https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html#isBlank()

如果字符串为空或仅包含空白代码点,则返回 true,否则返回 false。

Java 6 引入了String.isEmpty() ,因此您可以将它与String.trim()结合使用。 您还可以使用正则表达式,例如使用这样的条件: .str.matches("\\s*")

如果要测试,是否只包含空格字符,可以使用RegEx

string.matches("\\s*")

认为它比 trim().isEmpty() 更有效,特别是如果您期望空格并且有长字符串,但我不确定编译 RegEx 需要多少努力。

如果要测试长度为零的字符串,则最好使用isEmpty()length() == 0

如果要测试字符串是否仅包含空格,则搜索第一个非空格字符会更有效,因为不会创建中间 object(与trim()一样)

但无论如何,我也推荐 Apache 的 commons StringUtils.isEmpty() ,因为它很好地封装了所有这些。

String 中有一个用于此目的的方法。

String emptyString = "";
emptyString.isEmpty();

这将返回 true。

尝试

  str!=null && str.trim().isEmpty()

(最佳方式) string.equals("")

但是也,

string.isEmpty()

string.equals(null)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM