在 Java 中取得字串中的前 n 個字符
1. 概述
在這個簡短的教程中,我們將探索在 Java 中取得字串的前 n 個字元的不同方法。
首先,我們將學習如何使用核心 JDK 方法和類別來執行此操作。然後,我們將了解如何使用 Apache Commons Lang 和 Guava 等外部函式庫來實現相同的結果。
2.使用核心JDK
JDK 提供了幾種方法,我們可以使用它們來取得給定字串的前 n 個字元。那麼,讓我們仔細看看每個選項。
2.1.使用String#substring
方法
substring()
方法屬於String
類,並提供了回答我們的核心問題的最簡單的解決方案。顧名思義,此方法傳回給定 string 的子集作為新字串。
那麼,讓我們看看它的實際效果:
@Test
void givenString_whenUsingSubstringMethod_thenGetFirstChars() {
String givenInput = "Hello Baeldung Readers";
assertEquals("He", givenInput.substring(0, 2));
}
此方法接受兩個參數: beginIndex
和en
dIndex
。 beginIndex
表示第一個字元的索引, en
表示最後一個索引dIndex
該索引是唯一的。
話雖如此,傳回的en
字串從指定的dIndex
開始,並擴展到索引endIndex
– 1 處的字元。
2.2.使用String#subSequence
方法
另一種解決方案是使用subSequence()
方法。它傳回一個CharSequence
對象,該物件保存指定字串的一部分。
subSequence(start, end)
的呼叫行為與substring(start, end)
方法的呼叫完全相同。**那麼,讓我們看看它的實際效果:**
@Test
void givenString_whenUsingSubSequenceMethod_thenGetFirstChars() {
String givenInput = "Welcome";
assertEquals("Wel", givenInput.subSequence(0, 3));
}
類似地,該方法傳回字串“Welcome”
的前三個字元“Wel”
。我們應該記住,如果beginIndex
或endIndex
為負數,或者endIndex
大於字串長度,或者beginIndex
大於 endIndex,則此方法將拋出IndexOutOfBoundsException
endIndex.
2.3.使用String#chars
方法
String
類別提供chars()
作為檢索前 n 個字元的另一個選項。 Java 9 中引入了這個新方法,用於將給定字串作為Stream
進行操作。
因此,讓我們使用另一個測試案例來舉例說明chars()
方法的使用:
@Test
void givenString_whenUsingStreamApi_thenGetFirstChars() {
String givenInput = "The world is beautiful";
String result = givenInput.chars()
.limit(3)
.collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append)
.toString();
assertEquals("The", result);
}
簡而言之, chars()
傳回一個包含字串輸入的char
值的IntStream
。此外,我們使用limit(3)
方法來檢索前三個值。然後,我們將collect()與StringBuilder一起使用,從回傳值建立一個字串。
3. 使用 Apache Commons Lang
或者,我們可以使用 Apache Commons Lang 函式庫來應對我們的挑戰。它附帶了一組實用程式類,例如StringUtils
,我們可以使用它們來執行字串操作。
首先,我們將其依賴項新增到pom.xml
檔案中:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.14.0</version>
</dependency>
3.1.使用StringUtils#substring
方法
通常, StringUtils
提供其substring()
方法的版本。這個方法的特殊性在於,與String#substring
相比,它是空安全的:
@Test
void givenString_whenUsingStringUtilsSubstringMethod_thenGetFirstChars() {
String givenInput = "Baeldung";
assertEquals("Baeld", StringUtils.substring(givenInput, 0, 5));
}
如上所示,傳回的子字串“Baeld”
從位置 0 的字元開始,到位置5
之前結束。
3.2.使用StringUtils#left
方法
類似地,我們可以使用left()
方法來完成相同的結果。此方法傳回給定字串最左邊的 n 個字元。
那麼,讓我們透過一個實際範例來說明如何使用StringUtils#left
:
@Test
void givenString_whenUsingStringUtilsLeftMethod_thenGetFirstChars() {
String givenInput = "kindness always wins";
assertEquals("kind", StringUtils.left(givenInput, 4));
}
此方法的好處是它是 null 安全的,因為如果指定的字串輸入為null
,它會傳回null
。
4. 使用番石榴
另一種解決方案是使用番石榴。像往常一樣,在開始使用這個函式庫之前,我們需要將其依賴項新增至pom.xml
:
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>33.0.0-jre</version>
</dependency>
Guava 提供了Ascii#truncate
方法,我們可以使用它作為取得字串的第一個字元的解決方法:
@Test
void givenString_whenUsingGuavaTruncateMethod_thenGetFirstChars() {
String givenInput = "Tamassint";
assertEquals("Tama", Ascii.truncate(givenInput, 4, ""));
}
簡而言之,在我們的例子中,此方法將給定的字串截斷為指定的最大長度4
。
5. 結論
在這篇短文中,我們探索了在 Java 中取得給定字串的前 n 個字元的各種方法。
一路上,我們了解如何使用 JDK 方法和類別。然後,我們學習如何使用 Apache Commons Lang 和 Guava 等外部函式庫來實現相同的目標。
與往常一樣,本文中使用的程式碼可以在 GitHub 上找到。