Java中获取字符串中前n个字符的5种方法

在这个简短的教程中,我们将探索在 Java 中获取字符串的前 n 个字符的不同方法。

首先,我们将学习如何使用核心 JDK 方法和类来执行此操作。然后,我们将了解如何使用Apache Commons Lang和Guava等外部库实现相同的结果。

1. 使用Stringsubstring方法
substring ()方法属于String类,并提供了回答我们的核心问题的最简单的解决方案。顾名思义,此方法返回给定 string 的子集作为新字符串。

那么,让我们看看它的实际效果:

@Test
void givenString_whenUsingSubstringMethod_thenGetFirstChars() {
    String givenInput = "Hello Baeldung Readers";
    assertEquals(
"He", givenInput.substring(0, 2));
}

该方法接受两个参数:beginIndex和en dIndex。beginIndex表示第一个字符的索引,endIndex表示最后一个索引, 该索引是唯一的。

话虽如此,返回的子字符串从指定的 endIndex 开始,并扩展到索引endIndex – 1处的字符。

2. 使用StringsubSequence方法
另一种解决方案是使用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。

3. 使用Stringchars方法
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一起使用,从返回值构建一个字符串。

4、使用 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>

使用StringUtilssubstring方法

类似地,我们可以使用left()方法来完成相同的结果。此方法返回给定字符串最左边的 n 个字符。

 那么,让我们通过一个实际示例来说明如何使用StringUtilsleft

@Test
void givenString_whenUsingStringUtilsLeftMethod_thenGetFirstChars() {
    String givenInput = "kindness always wins";
    assertEquals(
"kind", StringUtils.left(givenInput, 4));
}

此方法的好处是它是 null 安全的,因为如果指定的字符串输入为null ,它会返回null。

5、使用guava
另一种解决方案是使用番石榴。像往常一样,在开始使用这个库之前,我们需要将其依赖项添加到pom.xml:

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>33.0.0-jre</version>
</dependency>

Guava 提供了Asciitruncate方法,我们可以使用它作为获取字符串的第一个字符的解决方法:

@Test
void givenString_whenUsingGuavaTruncateMethod_thenGetFirstChars() {
    String givenInput = "Tamassint";
    assertEquals(
"Tama", Ascii.truncate(givenInput, 4, ""));
}

简而言之,在我们的例子中,此方法将给定的字符串截断为指定的最大长度4。