如何逐行阅读String Builder

时间:2011-08-25 12:19:59

标签: java string io

我可以逐行阅读String Builder吗?并获得每一行的长度。


修改

我在StringBuilder中构建字符串并在其中添加”\ n“。我需要再次阅读它。我需要考虑每个”\ n“都有一个新行。

7 个答案:

答案 0 :(得分:24)

鉴于您的编辑,它就像在StringBuilder实例上调用toString(),然后在返回的String实例上调用split("\\n")一样简单。从那里开始,您将拥有一个String数组,您可以遍历该数组以访问StringBuilder实例的每个“行”。当然,在每个String实例上调用length(),或者“行”以获取其长度。


StringBuilder sb = new StringBuilder();
sb.append("line 1");
sb.append("\\n");
sb.append("line 2");

String[] lines = sb.toString().split("\\n");
for(String s: lines){
    System.out.println("Content = " + s);
    System.out.println("Length = " + s.length());
}

答案 1 :(得分:12)

创建一个Scanner对象,您可以轻松地解析线条并获得长度。

Scanner scan = new Scanner(sb.toString()); // I have named your StringBuilder object sb
while (scan.hasNextLine() ){
 String oneLine = scan.nextLine();
 System.out.println(oneLine.length());
}

答案 2 :(得分:0)

不确定您要做什么,但可以在其上调用toString().split()来获取数组。您可以在线分隔符。

答案 3 :(得分:0)

我认为没有方法可以逐行读取stringbuilder。 但是如果你想逐行分隔整个字符串,那么当你在StringBuilder中追加字符串时,你可能会使用换行符“”\ n“”。

答案 4 :(得分:0)

在追加到stringbuilder时使用(" \ n");. 这是一种简单的做法。

答案 5 :(得分:0)

如前所述,在简单的情况下,您可以使用toString().split()。如果你想要一些更灵活的东西并且还支持行删除,那么通过跟踪你返回的最后一行的开始和结束值来迭代这些行是非常简单的:

    new Iterator<String>() {
      boolean hasNext = true;
      boolean removed = false;
      int start = 0;
      int end = -1;
      @Override public boolean hasNext() {
        return hasNext;
      }

      @Override public String next() {
        removed = false;
        if (!hasNext) {
          throw new NoSuchElementException();
        }
        start = end + 1;
        end = value.indexOf("\n", start);
        if (end == -1) {
          hasNext = false;
        }
        return value.substring(
            start,
            end == -1 ? value.length() : end);
      }

      @Override public void remove() {
        if (removed) {
          throw new IllegalStateException("Multiple calls to remove() without and intervening call to next().");
        }
        value.delete(
            start,
            end == -1 ? value.length() : end + 1);
        end = start - 1;
        removed = true;
      }
    };

你可以在一个实用程序类中看到这个,它返回String或StringBuilder的LineIterator:http://pastebin.com/JA6abTg3

它有测试显示如何在这里使用它:http://pastebin.com/X1b5cGX8

答案 6 :(得分:0)

我意识到我是在几年后回复的,但遇到了同样的问题。

与其使用 Split() 等来玩这些游戏,为什么不直接构建一个字符串列表?

Dim Lines = New List(of String)
Dim Length As Integer

Lines.Add("The quick brown fox jumped over the lazy dog's back.")
Lines.Add("The slow turtle crawled down the grassy lane.")

For Each Line in Lines
  Length = Line.Length
  Debug.WriteLine("Length = " + Length)
Next