如何在 Java 中删除字符串的最后一个字符?

2025年3月17日 | 阅读 7 分钟

在 Java 中,主要有三个类与 **String** 相关。这三个类是 **String**、**StringBuilder** 和 **StringBuffer** 类。这三个类提供了与字符串操作相关的方法。**删除字符串的第一个和最后一个字符**也是我们可以对字符串执行的操作。

在本节中,我们将学习**如何在 Java 中删除字符串的最后一个字符**。在本节的最后,我们还解释了**如何删除字符串中每个单词的第一个和最后一个字符**。

有五种方法可以删除字符串的最后一个字符

  • 使用 **StringBuffer.deleteCahrAt()** 类
  • 使用 **String.substring()** 方法
  • 使用 **StringUtils.chop()** 方法
  • 使用 **正则表达式**
  • 使用 **StringBuilder**

使用 StringBuffer 类

**StringBuffer** 类提供了一个 **deleteCharAt()** 方法。该方法删除指定位置的字符。我们使用该方法来删除 **Java 字符串**中的字符。它接受一个类型为 int 的 **index** 参数。index 是我们要删除的字符的位置。它返回此对象。

语法

如果我们指定的索引为负数,或者索引大于等于字符串的长度,它将抛出 **StringIndexOutOfBoundsException**。

让我们在一个示例中实现该方法。

RemoveLastCharcter1.java

输出

Javatpoint is the best educational website

在上面的输出中,我们看到最后一个字符 s 已被删除。

优点

  • 简单明了。
  • 直接从 StringBuffer 对象中删除最后一个字符。

缺点

  • 需要与 StringBuffer 之间进行转换,这可能会导致额外的开销。
  • StringBuffer 是同步的,因此比 StringBuilder 慢。

使用 String.substring() 方法

**substring()** 是 String 类的方法。它接受两个类型为 int 的参数 **beginIndex** 和 **endIndex**。它返回一个新的**字符串(子字符串)**。它不是线程安全的,因为它在字符串为 null 或为空时不会抛出异常。

语法

如果 **beginIndex 为负数**,或者 **beginIndex > endIndex**,或者 **endIndex > 字符串长度**,它将抛出 **IndexOutOfBoundsException**。

RemoveLastCharacter2.java

输出

Welcome to Javatpoin

优点

  • 代码简单简洁。
  • 利用现有的 String 方法,无需额外类。

缺点

  • 创建了一个新的字符串对象,这可能会影响大字符串的内存使用。
  • 不如直接修改字符串有效。

使用 StringUtils.chop() 方法

**StringUtils** 类提供了一个 **chop()** 方法来删除字符串的最后一个字符。该方法接受一个 String 类型的参数。它也接受 **null** 作为参数。它返回删除**最后一个字符**后的字符串。当输入 null 字符串时,它也返回一个**null 字符串**。

语法

要使用 StringUtils 类的 chop() 方法,我们需要在 pom.xml 文件中添加以下依赖。当我们向 pom 文件添加 Apache commons lang3 jar 时,它会下载 jar 文件并将 jar 文件添加到路径中。我们必须导入包 **org.apache.commons.lang3.StringUtils**

添加依赖后,我们可以调用 StringUtils 类的 chop() 方法来删除字符串的最后一个字符。

RemoveLastCharacter3.java

输出

Googl

优点

  • 提供了一个专门用于删除最后一个字符的便捷方法。
  • 可以优雅地处理 null 字符串。

缺点

  • 需要包含 Apache Commons Lang 库,这会增加项目依赖。
  • 对于依赖要求严格的项目,可能不希望使用此依赖。

使用正则表达式

我们还可以使用**正则表达式**来删除或移除字符串的最后一个字符。String 类提供了 **replaceAll()** 方法,它接受两个类型为 String 的参数 **regex** 和 **replacement**。该方法用指定的匹配项替换字符串。

  • **regex:** 要匹配的表达式。
  • **replacement:** 每个匹配项的替换字符串或替代字符串。

它返回结果子字符串。

语法

如果正则表达式语法无效,它将抛出 **PatternSyntaxException**。

RemoveLastCharacter4.java

输出

Honesty is the best polic

优点

  • 在模式匹配方面提供了灵活性。
  • 可以处理更复杂的删除模式。

缺点

  • 与直接字符串操作相比,正则表达式处理可能较慢。
  • 正则表达式模式解析的开销。

使用 StringBuilder 类

删除字符串最后一个字符的另一种方法是使用 StringBuilder 类。StringBuilder 提供了一个便捷的 deleteCharAt() 方法,允许我们删除指定索引处的字符。

以下是我们如何利用 StringBuilder 来删除最后一个字符

在此示例中,sb.deleteCharAt(originalString.length() - 1) 从 StringBuilder 对象中删除最后一个字符,然后 toString() 方法将 StringBuilder 转换回字符串。

这是一个完整的 Java 代码示例,演示了如何使用 StringBuilder 类删除字符串的最后一个字符

RemoveLastCharacterExample.java

输出

Original String: Hello World
Modified String: Hello Worl

优点

  • 无需创建其他对象即可直接操作字符串。
  • 利用 StringBuilder 的高效方法。

缺点

  • 需要与 StringBuilder 之间进行转换,这可能会产生开销。
  • StringBuilder 不是同步的,因此不是线程安全的。

删除字符串中每个单词的第一个和最后一个字符

我们还可以删除或移除字符串中每个单词的第一个和最后一个字符。要删除第一个和最后一个字符,我们使用以下步骤:

  • 根据空格拆分(断开)字符串。
  • 对于每个单词,从第一个字母到最后一个字母运行一个循环。
  • 识别每个单词的第一个和最后一个字符。
  • 现在,删除每个单词的第一个和最后一个字符。

RemoveFirstAndLastCharacter.java

输出

Javatpoint is the best educational website
avatpoin  h es ducationa ebsit

在上面的输出中,我们看到字符串中每个单词的第一个和最后一个字符已被删除。单词“is”已完全删除,因为它只有两个字符。

比较总结

  • 复杂性:所有方法都相对简单易行,但有些需要额外的类或依赖项。
  • 性能:StringBuilder 或 StringBuffer.deleteCharAt() 等直接操作方法通常比创建新的字符串对象(String.substring() 或 String.replaceAll())更有效。
  • 依赖项:chop() 需要 Apache Commons Lang 库,这可能不适合所有项目。
  • 可读性:substring() 和 StringBuilder.deleteCharAt() 是直接且普遍易懂的方法,而正则表达式对于不熟悉它们的人来说可能更晦涩。
  • 灵活性:正则表达式在复杂模式匹配方面提供了最大的灵活性,而其他方法在功能上更为有限。

结论

总之,Java 提供了多种删除字符串最后一个字符的方法,每种方法都有其自身的权衡。StringBuffer.deleteCharAt() 和 StringBuilder.deleteCharAt() 提供了直接操作选项,而 String.substring() 在可能增加内存使用量的代价下提供了简洁性。StringUtils.chop() 提供了便利但增加了外部依赖,而正则表达式提供了灵活性但可能带来性能开销。方法的选择取决于性能要求、代码可读性和项目依赖等因素。