1. 概述

在Java中构建字符串时,我们通常会选择方便的StringBuilder来完成任务。

假设我们有一个包含多个字符串片段的StringBuilder序列,想要从中移除最后一个字符。在这个简短教程中,我们将探讨三种方法来实现这个操作。

2. 使用StringBuilderdeleteCharAt()方法

StringBuilder类提供了deleteCharAt()方法。它允许我们根据所需位置删除字符。

deleteCharAt()方法只有一个参数:我们想要删除的字符的索引。

因此,如果我们传入最后一个字符的索引给该方法,就可以删除该字符。为了简化,我们将使用单元测试断言来验证其按预期工作。

接下来,我们创建一个测试来检查它是否有效:

StringBuilder sb = new StringBuilder("Using the sb.deleteCharAt() method!");
sb.deleteCharAt(sb.length() - 1);
assertEquals("Using the sb.deleteCharAt() method", sb.toString());

如上述测试所示,我们将最后一个字符的索引(sb.length() - 1)传递给deleteCharAt()方法,并期望末尾的感叹号!被移除。

如果运行测试,它会通过。所以,deleteCharAt()方法解决了问题。

3. 使用StringBuilderreplace()方法

StringBuilderreplace()方法允许我们在序列的子串中用给定的字符串替换字符。该方法接受三个参数:

  • 开始索引(包括)
  • 结束索引(不包括)
  • 替换字符串

假设序列中最后一个字符的索引是lastIdx如果我们想删除最后一个字符,可以将lastIdx作为开始索引,lastIdx + 1作为结束索引,将空字符串“”作为替换值传递给replace()方法

StringBuilder sb = new StringBuilder("Using the sb.replace() method!");
int last = sb.length() - 1;
sb.replace(last, last + 1, "");
assertEquals("Using the sb.replace() method", sb.toString());

现在,如果我们运行上面的测试,它会通过。所以,replace()方法也可以用来解决这个问题。

4. 使用StringBuildersubstring()方法

我们可以使用StringBuildersubstring()方法从给定的字符串起始和结束索引获取子序列。该方法需要两个参数:开始索引(包括)和结束索引(不包括)。

值得一提的是,substring()方法返回一个新的String对象。换句话说,**substring()方法不会修改StringBuilder对象**。

我们将0作为开始索引,最后一个字符的索引作为结束索引传递给substring()方法,以获得去掉最后一个字符的字符串:

StringBuilder sb = new StringBuilder("Using the sb.substring() method!");
assertEquals("Using the sb.substring() method", sb.substring(0, sb.length() - 1));
//the stringBuilder object is not changed
assertEquals("Using the sb.substring() method!", sb.toString());

当执行测试时,它会通过。

正如测试所示,尽管substring()返回的字符串没有了最后一个字符(!),但原始的StringBuilder并未改变。

5. 总结

在这篇简短的文章中,我们学习了如何从StringBuilder序列中移除最后一个字符。

如往常一样,这里展示的所有代码片段都可以在GitHub上找到