# Zeilenweise aus einem StringBuffer lesen



## Granjow (14. Sep 2006)

Hallo zusammen,

Ich glaube, wenn man eine weile nicht programmiert, verblödet man einfach. Ich habe gerade eine ganze Datei in einem StringBuffer, den ich sonst mit regulären Ausdrücken manipuliere (genauer: es geht wieder um das Projekt, Wikisyntax in HTML umzuwandeln). Bei den Listen geht das nun einfach nicht, wegen deren Komplexität muss ich jede Zeile einzeln durchgehen. Nur kann ich mich überhaupt nicht erinnern, wie das an besten funktioniert. Meine jetztige Lösung ist es, einfach mit StringBuffer.indexOf(String, int) nach dem nächsten Vorkommen von java.lang.System.getProperty("line.separator") (oder so was) zu suchen, also CR/LF. Das habe ich nun mit ein paar While-Schleifen realisiert, was jedoch meiner Meinung nach witzlos ist, da es sicher schon eingebaute Funktionen gibt, die das 10x so schnell können. Oder etwas selber geschriebenes, jedenfalls eleganter und schneller. Nur wie?

tnx
Granjow


----------



## Guest (14. Sep 2006)

wie wär es mit readLine() zeielnweise zu lesen, statt erst zu lesen und in zeilen zu teilen?


----------



## Guest (14. Sep 2006)

oder halt wenn du das ganze für andere sachen als einen String brauchst, nimmste splitt:


```
String a = "Hallo /nWelt/nwie /n gehts/n wie/n stehsts??";
String[] b = a.split("/n");

for (String s : b) {
  System.out.println(s);
}
```


----------



## kopfsalat (14. Sep 2006)

Das Sinnvollste könnte wirklich sein, gleich beim Einlesen auf Zeilen zu gehen.
Dazu kannst du die readLine() Methode eines BufferedReader auf einem FileReader nutzen, oder noch einfacher gehts per readLine() aus der Klasse RandomAccessFile:

```
try {
	RandomAccessFile f = new RandomAccessFile(new File("myfile.txt"), "r");
	for (String line = f.readLine(); line != null; line = f.readLine()) {
		System.out.println(line);
	}
	f.close();
} catch (FileNotFoundException e) {
	// nix Datei da
} catch (IOException e) {
	// können nicht lesen
}
```

Wenn du von StringBuffer ausgehen willst, kannst du über StringReader zu einem BufferedReader gehen, also sowas wie: 

```
StringBuffer sb = new StringBuffer("Zeile 1\nZeile 2\n\rZeile 3");
BufferedReader b = new BufferedReader(new StringReader(sb.toString()));
try {
	for (String line = b.readLine(); line != null; line = b.readLine()) {
		System.out.println(line);
	}
} catch (IOException e) {
	// kann bei Strings nicht passieren
}
```


----------



## Granjow (18. Sep 2006)

Vielen Dank! Für meine Version ist der BufferedReader am geeignetesten, da ich sonst nur mit StringBuffer arbeite. Mal schauen, wie ich weiterkomme  Das Programm hat schon beinahe 1000 Zeilen.

tnx,
Granjow


----------

