Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
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;
}
}
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.
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.
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.
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,})
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.