Zeilenweise aus einem StringBuffer lesen

Status
Nicht offen für weitere Antworten.

Granjow

Mitglied
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
 
wie wär es mit readLine() zeielnweise zu lesen, statt erst zu lesen und in zeilen zu teilen?
 
oder halt wenn du das ganze für andere sachen als einen String brauchst, nimmste splitt:

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

for (String s : b) {
  System.out.println(s);
}
 
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:
Code:
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:
Code:
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
}
 
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
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben