Alle Leerzeichen aus String entfernen

JaninaSt

Aktives Mitglied
Hallo!

Ich habe eine Textdatei zum Beispiel in dieser Form:
1
2
3
GEFUNDEN
4


Jetzt möchte ich das ganze einlesen und in eine andere Textdatei ausgeben, was auch funktioniert. Allerdings möchte ich, dass bei der Ausgabe bei dem Wort GEFUNDEN, alle Leerzeichen davor verschwinden, die Ausgabedatei also so aussieht:
1
2
3
GEFUNDEN
4

Ich dacht mit der trim() Methode funktioniert das, geht aber nicht. Mach ich was falsch, oder gibts da ne bessere Methode dafür?
...

PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(file)));
String line = in.readLine();
while(line != null) {
if(line.equals("GEFUNDEN")) {
out.println(line.trim());
}
...
 
Mit der trim() Funktion werden alle Leerzeichen eines Strings entfernt.
Außerdem sind Strings nicht mutationsfähig, d.h. ein typischer Fehler ist, einfach
Java:
str.trim();
zu schreiben. Besser:
Java:
String newStr = str.trim();

Das wird dir aber in deinem Falle nicht helfen - nur mal so als Hinweis.

Ich denke du kannst eine Funktion machen, die in Länge deines Strings solange alle führenden Leerzeichen entfernt, bis ein anderes Zeichen gefunden wird.
Beispielsweise so:

Java:
String line = "      GEFUNDEN";
for (char c : line.toCharArray()) {
  if (c.equals(" ")) {
    line = line.substring(1);
  } else {
    break;
  }
}
 
Zuletzt bearbeitet:
String.trim() ist, was du suchst. Allerdings solltest du vielleicht nicht [c]line[/c] sondern [c]line.trim()[/c] vergleichen.
 
Zuletzt bearbeitet:
Mit der trim() Funktion werden alle Leerzeichen eines Strings entfernt.

Falsch es werden nur führende und folgende Leerzeichen entfernt laut Doku.

Java:
String str="a b c d";
str=str.trim();

dann bleibt das "a b c d"

bei
Java:
String str="     a b c d";
str=str.trim();

kommt auch "a b c d" raus

Und wenns darum geht das "GEFUNDEN" zu "entdecken" unabhänig von führender Leerzeichen sollte ein
Java:
line.contains("GEFUNDEN");
helfen
 
Zuletzt bearbeitet:
Die replaceAll(String,String) Methode ist, denke ich mal, das was du suchst. Sie wird so verwendet: str.replaceAll(String der ersetzt werden soll, String der stattdessen eingesetzt werden soll)

In deinem Fall wäre der zweite String leer und der erste wäre nur ein Leerzeichen.

Gruß
Gucky
 
Die replaceAll(String,String) Methode ist, denke ich mal, das was du suchst. Sie wird so verwendet: str.replaceAll(String der ersetzt werden soll, String der stattdessen eingesetzt werden soll)

In deinem Fall wäre der zweite String leer und der erste wäre nur ein Leerzeichen.
Gucky

So würde ich es auch machen. Erweiternd kann man hierzu noch sagen, dass es sich empfiehlt, wenn bei "GEFUNDEN" mehrere Leerzeichen davor sein können, dass man natürlich alle ersetzt. Hierbei schafft ein einfaches Regex Abhilfe.

Code:
replaceAll(" +","");

Hierbei würden also alle Leerzeichen - egal ob eins oder mehrere hintereinander - ersetzt werden.
 
Ist das nicht grade der Witz von replaceAll(), dass diese Methode wirklich alles ersetzt, was im ersten String steht?

str="Strrrrrrrrrrrrrrrrring";
str1=str.replaceAll("r","");
System.out.println(str1); //Sting

Oder liege ich da falsch?
 
Das ist richtig. Der Ausdruck von replaceAll wird aber als regulärer Ausdruck interpretiert, wenn ich mich nicht irre. Durch das + Zeichen von Fab werden also nur alle Leerzeichen vor dem "GEFUNDEN" entfernt.
 
Also sagt das + dass hinter den Leerzeichen noch was kommen muss? Aber dann werden doch trotzdem alle Leerzeichen entfernt, bis auf die am Stringende.
 
Also sagt das + dass hinter den Leerzeichen noch was kommen muss?

Nein.

Aber dann werden doch trotzdem alle Leerzeichen entfernt, bis auf die am Stringende.

Das + ist ein sog. Quantor (engl. quantifier / Wiederholungszeichen).

Auszug aus Wiki:

? Der voranstehende Ausdruck ist optional, er kann einmal vorkommen, muss es aber nicht, d. h. der Ausdruck kommt null- oder einmal vor. (Dies entspricht {0,1})
+ Der voranstehende Ausdruck muss mindestens einmal vorkommen, darf aber auch mehrfach vorkommen. (Dies entspricht {1,})
* Der voranstehende Ausdruck darf beliebig oft (auch keinmal) vorkommen. (Dies entspricht {0,})

Evtl. wäre hier entsprechend das * angebracht.
 
Zuletzt bearbeitet:
Ich versteh aber immer noch nicht, wie eine Regex da helfen sollte. Meiner Meinung nach ist das Ergebnis dasselbe. Die Leerzeichen sind weg. 🙂
 
Achso. Jetzt verstehe ich erst, was du meinst. 😀

Also ich habe replaceAll() immer ohne Regex verwendet und bin immer gut ausgekommen. Selbst wenn der erste String als Regex interpretiert werden sollte, muss man dies nicht verwenden. Also einfach in den ersten String ein Leerzeichen und den zweiten string leer lassen und alle Leerzeichen werdeb entfernt. 🙂
 
Also ich habe replaceAll() immer ohne Regex verwendet und bin immer gut ausgekommen. Selbst wenn der erste String als Regex interpretiert werden sollte, muss man dies nicht verwenden. Also einfach in den ersten String ein Leerzeichen und den zweiten string leer lassen und alle Leerzeichen werdeb entfernt. 🙂
Nur zum Verständnis: Der String wird IMMER als Regex interpretiert. Egal ob du Regex-Steuerzeichen verwendest oder nicht.
 

Neue Themen


Zurück
Oben