【问题标题】:How can I remove first 3 lines from a stringbuilder obj in java如何从 java 中的 stringbuilder 对象中删除前 3 行
【发布时间】:2019-04-15 07:45:46
【问题描述】:

我有一个 StringBuilder 对象,它分别具有称呼、姓名、姓氏、地址和 phone_no 作为它的值,它们中的每一个都特别适合单独的行。

因此我完全需要从对象中删除前 3 行以获取地址和电话号码。

我用过,

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

但它只是删除了第一行。 我尝试在对象上迭代 3 次并运行 delete api,但它仍然只删除了第一行。

你能帮我一次删除这 3 行,而不增加代码复杂度吗?

【问题讨论】:

标签: java stringbuilder


【解决方案1】:

正如您在the docs 中看到的那样,delete 函数将结束索引视为排他的。

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

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

【讨论】:

  • 非常感谢您的建议。 indexOf()+1 为我工作。在我的一段代码中,我是这样使用的,sb.delete(0, sb.indexOf("\n") + 1);sb.delete(0, sb.indexOf("\n") + 1);sb.delete(0, sb.indexOf("\n")); 它工作了@Kaddath
【解决方案2】:
sb.delete(0, sb.indexOf("\n"));

但它只是删除了第一行。

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

或者,您可以使用 other 版本的indexOf(),它采用起始索引并使用它来计算第三个换行符的索引!

除此之外,从概念上讲... StringBuilder 旨在构建字符串,而不是像那样操作它们。我建议:首先考虑不要使用 StringBuilder 。相反,请使用 List<String> 例如,在处理期间存储所有行。稍后,您可以轻松移除前槽。

StringBuilder 类的 API 并非设计用于执行复杂的 indexOf'ing 或删除操作。它的目的是追加东西,然后把它变成一个字符串。当您考虑不同的行尾时,它尤其会变得有趣,并且可能需要 indexOf()+1 ... 或者可能需要 +2,具体取决于上下文。 only 将你的行存储在一个列表中(最后没有任何换行符)会容易得多,然后当你完成后......只需将该列表转换为字符串,使用任何换行符(s) 适合你。

【讨论】:

    猜你喜欢
    • 2021-04-28
    • 2015-10-04
    • 1970-01-01
    • 2017-08-08
    • 2010-09-11
    • 2017-09-27
    • 1970-01-01
    • 2014-02-19
    • 2015-08-05
    相关资源
    最近更新 更多