簡體   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