1. 概述
在Java中构建字符串时,我们通常会选择方便的StringBuilder
来完成任务。
假设我们有一个包含多个字符串片段的StringBuilder
序列,想要从中移除最后一个字符。在这个简短教程中,我们将探讨三种方法来实现这个操作。
2. 使用StringBuilder
的deleteCharAt()
方法
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. 使用StringBuilder
的replace()
方法
StringBuilder
的replace()
方法允许我们在序列的子串中用给定的字符串替换字符。该方法接受三个参数:
- 开始索引(包括)
- 结束索引(不包括)
- 替换字符串
假设序列中最后一个字符的索引是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. 使用StringBuilder
的substring()
方法
我们可以使用StringBuilder
的substring()
方法从给定的字符串起始和结束索引获取子序列。该方法需要两个参数:开始索引(包括)和结束索引(不包括)。
值得一提的是,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上找到。