# Leerzeilen entfernen



## Gast (14. Jul 2006)

Hallo zusammen,
ich lese gerade eine Textdatei aus und möchte die überflüssigen Leerzeilen entfernen.
Mit sowas wie:

```
BufferedWriter neu = new BufferedWriter();
FileReader filreader = new Filereader();
String string = filereader.readLine();
if(!string.substring(0,1).equals(" "){
neu.writeLine(string);
neu.newLine();
}else{
string = filereader.redLine()
}
```
in einer Schleife natürlich verpackt bekomme ich bei einer Leerzeile eine StringOutOfBoundsException, ist ja klar.
Hat vielleicht jemand eine Idee wie ichg dies umsetzen kann?
Besten Dank


----------



## Kola (14. Jul 2006)

Mit trim() entfernst du Whitespace aus Strings.


```
.....
String zeile = .....
if((zeile.trim().equals(""))==false)
{
    //Zeile wegschreiben
}else
{
    //nur Leerzeichen
}
```


----------



## me.toString (14. Jul 2006)

Also mir fallen da zwei Möglichkeiten ein ... 
1. Du fängst die StringOutOfBoundsException einfach auf und machst dann einfach nix mit der gelesenen Zeile oder
2. du fragst  nicht mit substring() nur die ersten Zeichen ab, sondern fragst den ganzen String string.equals(" ") ... da muss aber aufpassen, dass string nicht null wird ... sonst hast auf einmal 'ne NullPointerException ... also dann lieber 

```
if( string != null && !string.equals(" ") ) ...
```


----------



## Gast (14. Jul 2006)

Vielen Dank erstmal.
Mit trim funktioniert es ganz gut.
mit 

```
!string.equals(" ")
```
habe ich keine Chance, da ja gar kein Leerzeichen in der Zeile ist.
Es handelt sich nur um eine leere Zeile.
Aber trotzdem vielen Dank, wäre sonst nicht weiterge-
kommen.


----------



## Murray (14. Jul 2006)

Den Vergleich auf "" kann man sich auch noch schenken, indem man die Länge abfragt (das dürfte etwas effizienter sein  als ein String-Vergleich).


```
if( string.trim().length() > 0) {
  //--- Zeile schreiben
} else {
  //--- Zeile enthält nur Whitspace-Characters
}
```


----------



## Einwegdose (14. Jul 2006)

Bin mir nicht sicher ob das geht .. eine leere Zeile muss nicht aus 0 Zeichen bestehen 

Ich würde es so machen:


```
BufferedWriter neu = new BufferedWriter(...);
FileReader filereader = new Filereader();
String string;
while ( filereader.ready() ) {
 if ( !(string = filereader.readLine()).equals("\r\n") )  neu.writeLine(string+"\r\n");
}
```


----------



## Murray (14. Jul 2006)

Einwegdose hat gesagt.:
			
		

> Bin mir nicht sicher ob das geht .. eine leere Zeile muss nicht aus 0 Zeichen bestehen


Hat ja auch niemand behauptet. Aber eine Leerzeile, aus der mit trim() leading und trailing whitespace entfernt wurde, sollte eigentlich eine Länge von 0 haben - zumindest wenn man die Auffassung teilt, dass das Wesen einer Leerzeile eben darin besteht, dass sie keine Zeichen außer Whitespace-Characters enthält.


----------



## Leroy42 (14. Jul 2006)

Einwegdose hat gesagt.:
			
		

> ```
> if ( !(string = filereader.readLine()).equals("\r\n") )  neu.writeLine(string+"\r\n");
> ```



Wird nicht funktionieren, da

1. "\r\n" nur unter Windows die Repräsentation einer Leerzeile ist.
2. Die Reader die Leerzeilen sowiese entfernen und eine Sequenz die eine Leerzeile darstellt
gar nicht geliefert werden kann!

Die Lösung mit line.trim().length() > 0 ist schon in Ordnung, da trim auch die Whitespaces
Blank, Tabulator(, Formfeed?) entfernt.


----------



## Murray (14. Jul 2006)

Leroy42 hat gesagt.:
			
		

> Die Lösung mit line.trim().length() > 0 ist schon in Ordnung, da trim auch die Whitespaces
> Blank, Tabulator(, Formfeed?) entfernt.



Gemeinerweise hat String#trim eine etwas andere Definition von Whitespace als z.B. Pattern: für String#trim sind alle Zeichen <= '\u0020' Whitespace.


----------



## Leroy42 (14. Jul 2006)

Daß für trim alle Steuerzeichen (EOB, EOT,  ...) whitespaces sind, wußte ich nicht  :shock: 

Aber ich denke mal, für das was man _üblicherweise_ bei Textdateien unter
Leerzeichen versteht, sollte es keine Probleme geben.


----------

