字串 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 上找到原始程式碼。