从 StringBuilder 中删除追加的字符串

3
如何从我的字符串构建器中删除之前追加的字符串?例如,如果我有以下内容:
result.append("$10.00");
result.append("+" + "$20.00");
result.append("+" + "$5.00");

如何从字符串"$10.00 + $20.00 + $5.00"中分别删除$5和$20?


1
你需要改变计算器的使用方法。不要在用户输入时立即将值附加到 StringBuilder 上,而是在用户提供操作时进行最终字符串创建。无论如何,我认为这种方法看起来有点有问题。 - Rahul
你所需要的,应该使用一个字符串(String)的ArrayList(或等价物),并在确定完成后将它们连接起来。StringBuilder的API实际上并不考虑你的用例。 - Sirs
7个回答

4

一旦追加,它就变成了 "one",您无法反转。

然而,在此情况下,您可以使用以下方法:

result.delete(result.lastIndexOf("+"), result.length());

2

没有直接的方法来做到这一点。我建议您将每个子字符串附加到一个List甚至是Stack中,并从数据结构中弹出任何您不需要的内容。当您完全确定要在StringBuilder中呈现什么时,通过运行您的Collection并将每个子字符串放入最终的StringBuilder,开始附加它。


0
根据您的问题,不需要从输出字符串中删除字符。
自Java 8以来,引入了新的StringJoiner类。
StringJoiner stringJoiner = new StringJoiner(", ");
for (String item : itemList) {
    stringJoiner.add(item)
}

如需更多信息,请阅读StringJoiner

希望这可以帮到您。


0
有一种方便的方法可以删除,如果您能够在附加之前存储StringBuilder的长度。
result.append("$10.00");
int len = result.length();
result.append("+" + "$20.00");
// remove what is appended
result.setLength(len);


0

StringBuilder 在问题中被使用。 - Boris

0

恐怕没有简单的方法可以做到这一点。

相反,您可以将结果存储到可索引的结构中,例如ArrayList(),并仅在最后构建结果字符串,当您确定要附加到StringBuilder的数据时。


0
对于你的具体例子,每个金额之间用“+”字符分隔,我会选择在从StringBuilder创建字符串后使用String类中的split方法。如果你能更具体地说明为什么要再次删除字符串,那将有助于选择正确的解决方案。
我猜你真正想要的是在StringBuilder对象上有一个remove方法,但恐怕这样的方法并不存在。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接