# StringBuffer leere Zeile löschen



## 127.0.0.1 (10. Apr 2012)

Hi Leute,

habe einen StringBuffer erzeugt, lese eine Datei ein und bearbeite Sie etwas.
Das funktioniert auch ganz gut.....

Aber leider hat die erste Zeile keinen Inhalt, ist also leer, existiert aber trotzdem.

[XML]

erste Zeile...
zweite Zeile...
usw...[/XML]

Die Zeile enthält *keine *Leerzeichen oder Absätze oder ähnliches, sie ist komplett leer

*Wie kann ich in einem StringBuffer eine leere Zeile löschen ?*


Gruß


----------



## maki (10. Apr 2012)

Direkt gar nicht, StringBuffer (ist übrigens veraltet) kennt keine "Zeilen".

Zeig doch mal deinen Code...


----------



## 127.0.0.1 (10. Apr 2012)

maki hat gesagt.:


> Direkt gar nicht, StringBuffer (ist übrigens veraltet) kennt keine "Zeilen".
> 
> Zeig doch mal deinen Code...



Das es nicht direkt geht hab ich schon bemerkt, oder sagen wir bemerken müssen ^^
wieso veraltet ? also ich nutze StringBuffer relativ viel.......

Code is schwer zu posten, is nämlich sehr viel ^^
Versuche mal das wesentliche herauszuheben:


```
StringBuffer sb = new StringBuffer();
BufferedReader inn=null;
try {
inn = new BufferedReader(new FileReader("Mein_File"));

 for (String line; (line = inn.readLine()) != null;) {

if (line.startsWith("%")) {
	zaehler++;
	sb.append(line + CR);
	line = inn.readLine();
}

// hier kommt noch ein switch-case

} catch (Exception e) {
e.printStackTrace();
}

// sb.deleteXY  und hier bräuchte ich das Zeilen-löschen dann
return sb;
```


----------



## maki (10. Apr 2012)

> wieso veraltet ? also ich nutze StringBuffer relativ viel.......


StringBuilder gibt es seit Java 5, das war 2005 

Warum nimmst du eigentlich nicht einfach eine String Liste, anscheinend hast du den StringBuffer nur aus Gewohnheit genommen..


----------



## 127.0.0.1 (10. Apr 2012)

maki hat gesagt.:


> Warum nimmst du eigentlich nicht einfach eine String Liste,



meinst du eine Arraylist ?

und ja, das tu ich aus gewohnheit ^^


----------



## maki (10. Apr 2012)

Ja, ich meine 

```
List<String> list = new ArrayList<>();
```
denn dein StringBuffer ist schlicht unpassend.


----------



## nillehammer (10. Apr 2012)

Naja, StringBuffer ist nicht direkt veraltet. Er ist nur für Multithread-Nutzung geschrieben worden und ist deswegen aufgrund der synchronisierten Zugriffsmethoden unnötig langsam. Meist braucht man keinen Multithread-Support. Als Ersatz ist deswegen die Klasse StringBuilder eingeführt worden. Dazu ein Zitat aus der API-Doc von StringBuffer: "As of release JDK 5, this class has been supplemented with an equivalent class designed for use by a single thread, StringBuilder. The StringBuilder class should generally be used in preference to this one, as it supports all of the same operations but it is faster, as it performs no synchronization."


----------



## nillehammer (10. Apr 2012)

Mir ist an Deinem Code gerade etwas aufgefallen, das wahrscheinlich ein Fehler ist. Innerhalb der for-Schleife machst Du zwei Mal line = inn.readLine(); Ist das wirklich gewünscht?

```
// So hätt ich das auch gemacht:
for (String line; (line = inn.readLine()) != null;) {
...
// Das ist glaub ich nicht richtig
if (line.startsWith("%")) {
    zaehler++;
    sb.append(line + CR);
    line = inn.readLine(); // <----
}
```


----------



## 127.0.0.1 (10. Apr 2012)

ja, das passt so
wie gesagt, kann leider nicht den ganzen Code posten......

um nochmal auf meine Frage zu dem Stringbuffer zurückzukommen:
gibt direkt leider keine möglichkeit,
aber ich würde es gerne als StringBuffer lassen, nächstes mal versuche ich dann die Arraylist

Bei mir hackts auch etwas was einen "Alternativ Weg" angeht.....
mit ner Schleife kann ich das ganze nicht machen, weil ich ja nur möchte das die erste Zeile entfernt wird.
Deshalb muss ich den Code fürs Löschen außerhalb der Schleife posten, aber das fürt dazu dass ich keinen Zugriff auf mein "line" hab ~~


Versteht man das einigermaßen ? ^^


----------

