replaceall() funktioniert nicht richtig

Status
Nicht offen für weitere Antworten.

Reality

Top Contributor
Hi!

Code:
      File f = new File("Main.class");
      String path2 = f.getAbsolutePath().toString();
      path2.replaceAll("\\", "/");
      path2.replaceAll("Main.class", "");
      System.out.println(path2);

Dieser Code gibt mir gar nichts aus.

Wenn ich die replace-Befehle weglasse, gibt er mir folgendes aus:

D:\Programming Language\Projects\Java\Bomberman\Main.class

Komischerweise gibt er mir das gleich aus, wenn ich nur den ersten replace-Befehl (path2.replaceAll("\\", "/"); ) auslasse.

Woran kann das liegen? ???:L

Liebe Grüße
Reality
 
Versuch mal folgendes:
Code:
  File f = new File("Main.class");
      String path2 = f.getAbsolutePath().toString();
      path2=path2.replaceAll("\\", "/"); // Geändert
      path2=path2.replaceAll("Main.class", ""); // Geändert
      System.out.println(path2);

Denn: Strings sind unveränderlich. replacheAll() gibt daher einen neuen String zurück.
 
Ein großes Danke an beide Poster! 🙂

Eine Frage noch:
Warum muss das so heißen?
Code:
es muss heissen replaceAll("\\\\", "/");

EDIT: Noch eine Frage:
Der Ordner in dem sich Main.class befindet ist:

D:\Programming Language\Projects\Java\Bomberman\classes
Aber irgendwie wird der Ordner classes ausgelassen. Warum ist das so?

Liebe Grüße
Reality
 
Anonymous hat gesagt.:
Zuerst einmal möchte ich meinem Vorredner für diesen ausführlichen
und zum tiefen Nachdenken bewegenden Beitrag danken. Auch die
wohl von keinem anderen erreichbare Fähigkeit, all diese Gedanken
in so erstaunlicher Prägnanz auszudrücken, verdient unser aller Res...
Beitrag gekürzt

path2.replaceAll("\\", "/");

war schon richtig. Es ist nur so, daß Strings immutable sind und daher
auch nicht verändert werden. Die Methode liefert einfach einen neuen String
zurück, der wieder in path2 gespeichert werden muß.

Aber irgendwie wird der Ordner classes ausgelassen. Warum ist das so?

Kann es sein, das dein Main.class in einem Package "classes" liegt?
 
bummerland hat gesagt.:
Code:
replaceAll("\\\\", "/");

ist richtig! Die replaceAll() verlangt einen Regex. Und da der Backslash eine spezielle Bedeutung hat in den Regex-Ausdrücken, muss er in diesem Fall doppelt maskiert werden.
 
anders gesagt:

du willst einen \ matchen

leider ist der \ aber in der "Regex-Sprache" schon ein Spezialzeichen, und als Ersatz wird daher \\ vereinbart

also ist \\ der richtige Regex

jetzt kommts: du willst den in einen Java-String im Quelltext eines Programms einbauen, aber bei String-Literalen im Java-Quelltext ist \ leider auch ein Spezialzeichen, und auch hier ist \\ der verwendete Ersatz

deshalb viermal
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben