webentwicklung-frage-antwort-db.com.de

Wie liest man den String Builder Zeile für Zeile?

Kann ich den String Builder Zeile für Zeile lesen? Und bekomme auch die Länge jeder Zeile.


BEARBEITEN:

" Ich baue String in StringBuilder und füge"\n "hinzu. Und ich muss es noch einmal lesen. Ich muss bedenken, dass jedes"\n "eine neue Zeile hat. "

14
Ran Gualberto

In Anbetracht Ihrer Bearbeitung ist es so einfach, dass Sie in der StringBuilder-Instanz toString() aufrufen und anschließend in der zurückgegebenen String-Instanz split("\\n") aufrufen. Von dort aus haben Sie ein String-Array, das Sie durchlaufen können, um auf jede "Zeile" der StringBuilder-Instanz zuzugreifen. Und natürlich rufen Sie length() für jede String-Instanz oder "Zeile" auf, um ihre Länge zu ermitteln.


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());
}
23
mre

Machen Sie ein Scannerobjekt und dort können Sie Zeile für Zeile einfach analysieren und die Länge ermitteln.

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());
}
12
Farmor

Sie sind sich nicht sicher, was Sie zu tun versuchen, aber Sie können toString().split() aufrufen, um ein Array zu erhalten. Sie können Online-Trennzeichen aufteilen.

0
JRL

Verwenden Sie ("\ n"); beim Anhängen an den Stringbuilder. Dies ist der einfache Weg.

0
Andy

Wie bereits erwähnt, können Sie im einfachen Fall einfach toString().split() verwenden. Wenn Sie etwas mehr Flexibilität wünschen und auch die Entfernung von Zeilen unterstützen, ist es ziemlich einfach, die Zeilen zu durchlaufen, indem Sie einfach die Start- und Endwerte der letzten Zeile verfolgen, die Sie zurückgegeben haben:

    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;
      }
    };

Sie können dies in einer Dienstprogrammklasse sehen, die einen LineIterator für String oder StringBuilder zurückgibt: http://Pastebin.com/JA6abTg3

Und es hat Tests, die zeigen, wie es hier verwendet werden kann: http://Pastebin.com/X1b5cGX8

0
Rich

Ich denke, es gibt keine Methode, um Stringbuilder Zeile für Zeile zu lesen. , Aber wenn Sie die gesamte Zeichenfolge zeilenweise trennen möchten, können Sie beim Anhängen der Zeichenfolge in StringBuilder das Zeilenvorschubzeichen ""\n "" angeben.

0
Yagnesh Agola