字串 isEmpty() 和 isBlank() 之間的區別
一、簡介
在 Java 中使用Strings
有時會令人困惑,因為我們有很多方法可以做類似的事情。
在本文中,我們將了解如何使用isEmpty()
和isBlank()
方法來驗證空白和空Strings
。雖然相似,但這兩種方法並不相同。
2. 來看看String.isEmpty()
讓我們從isEmpty()
String
操作開始。簡單地說,如果String
為空,則*isEmpty()*方法傳回 true。否則,返回 false。
在內部, isEmpty()
依賴表示String
物件文字的位元組陣列的長度。此外, isEmpty()
方法會對任何類型的字元進行計數,以計算文字是否為空。因此,空格、製表符、換行符或任何可以表示為位元組的字元都算作有效字元。
讓我們透過一個簡單的測試來說明這一點:
@Test
public void givenString_whenCallIsEmpty_thenReturnCorrectValues() {
assertFalse("Example text".isEmpty());
assertTrue("".isEmpty());
assertFalse(" ".isEmpty());
assertFalse("\t\n\r\f".isEmpty());
}
眾所周知,第一行測試包含字元的String
,因此isEmpty()
傳回 false。
另一方面,第二個String
不包含任何字符,因此isEmpty()
傳回 true。
最後,對於只有空白字元的String
和第 3 行和第 4 行有轉義字元的字串, isEmpty()
會傳回 false。
3.查看Java 11的String.isBlank()
Java 11 中引入的isBlank()
方法與isEmpty()
相同,但細微差別在於它對於僅包含空白字元的Strings
也傳回 true 。
Java 中被視為空白字元的五個字元是\s
(空格)以及\t, \n, \r, and \f
轉義序列。
在幕後, isBlank()
方法搜尋第一個非空白字元的索引。如果沒有非空白字符,則該索引將等於數組的長度。最後,它將該索引與位元組數組的長度進行比較以輸出正確的答案。
讓我們透過單元測試來檢查一下:
@Test
public void givenString_whenCallStringIsBlank_thenReturnCorrectValues() {
assertFalse("Example text".isBlank());
assertTrue("".isBlank());
assertTrue(" ".isBlank());
assertTrue("\t\n\r\f ".isBlank());
}
值得注意的是,「範例文字」被認為不是空白,因為它至少包含一個非空白字元。
此外,第二個String
不包含任何字符,因此它是空白的。
第三行的String
僅包含空白字符,因此isBlank()
傳回 true。
此外,最後一行中的String
包含所有被視為空格的轉義序列字元。因此,在這種情況下, isBlank()
也會傳回 true。
4. 比較isBlank()
與isEmpty()
總之, isEmpty()
僅當String
不包含任何字元時傳回 true。相反,當String
不包含任何字元且其所有字元都是空白字元時, isBlank()
會傳回 true。
讓我們使用一個表格來視覺化前面章節中所描述的情況下isEmpty()
和isBlank()
的所有回傳值。
方法 | 沒有字元 | \t | \n | \r | \F | \s(空格) | 任何其他 |
---|---|---|---|---|---|---|---|
isEmpty() |
true |
false |
false |
false |
false |
false |
false |
isBlank() |
true |
true |
true |
true |
true |
true |
false |
上表總結瞭如果String
不包含任何字符,則兩種方法都傳回 true。
此外,轉義序列\t
、 \n
、 \r
、 \f
和\s
被視為空白字符,因此只有isBlank()
會傳回 true。相反, isEmpty()
對所有這些都回傳 true。
最後,對於與表中顯示的字符不同的任何其他字符,兩種方法都會傳回 false。
在 Java 11 之前,開發人員通常使用String.trim()
和String.isEmpty()
的組合來驗證文字是否僅包含空格字元。但是,正如我們在本教程中看到的,在使用 Java 11 或更高版本的應用程式中,我們可以簡化為僅使用String.isBlank()
。
5. 結論
在本教程中,我們了解了isBlank()
與isEmpty()
之間的差異。關鍵區別在於isBlank()
對於空白字元傳回 true,例如某些轉義序列。另一方面, isEmpty()
僅當String
不包含任何字元時才傳回 true 。
與往常一樣,您可以在 GitHub 上找到原始程式碼。