如何从Java中的stringbuilder obj中删除前3行

时间:2019-04-15 07:45:46

标签: java stringbuilder

我有一个StringBuilder对象,它的值分别是称呼,名称,姓氏,地址和phone_no,它们中的每一个都是单独的行。

因此,我完全需要从对象中删除前3行以获取地址和phone_no。

我用过

"sger/laravel-paypal": "^0.1.0",

但是它只是删除了第一行。 我尝试遍历该对象3次并运行了sb.delete(0, sb.indexOf("\n")); API,但是仍然只删除了第一行。

能否请我一次删除这3行,而又不增加代码复杂度?

2 个答案:

答案 0 :(得分:4)

您可以在the docs中阅读,delete函数会将结尾索引视为互斥。

因此,当您执行sb.delete(0, sb.indexOf("\n")); 3次后,\n会保留,因为它不包含在已删除部分中,这是您第二次和第三次从索引0到0删除。

尝试sb.delete(0, sb.indexOf("\n") + 1);

答案 1 :(得分:3)

sb.delete(0, sb.indexOf("\n"));
  

但是它只是删除了第一行。

当然可以。上面的内容告诉StringBuilder将所有字符从索引0删除到第一行。如果要删除三行,则必须将以上内容放入循环中,并调用三遍。或者更确切地说:从0删除到indexOf()+1

或者,您可以使用indexOf() other 版本,该版本需要一个起始索引,然后使用该版本来计算该第三条换行符的索引!

除此之外,从概念上讲... StringBuilder旨在构建字符串,而不是像这样操纵它们。我建议:首先考虑不要使用StringBuilder。而是使用List<String>例如在处理过程中存储所有行。然后,您可以轻松卸下前插槽。

StringBuilder类的API并非旨在执行复杂的indexOf处理或删除操作。它旨在附加,然后将其转换为字符串。当您考虑不同的行尾时,它变得特别有趣,根据上下文,您可能需要indexOf()+ 1 ...或+2。 将行存储在列表中(末尾没有任何换行符)会容易得多,然后当您完成操作后...使用任何换行符char将该列表转换为字符串(s)适合您。