Ich habe einen String, welcher einen Baclslash ("\") enthält und möchte diesen Backslash in einen normalen Slash ("/") umwandeln. Gibt es dazu irgend eine spezielle funktion?
lauten. replaceAll arbeitet nämlich mit regexp. Und da braucht man ein \\ für ein \. Um aber in Java in einem String ein \\ hinzubekommen, braucht man ein \\\\.
Ich meine was anderes, habe eine .ini und dort können Parameter u.a auch Pfade angegeben werden.
Nun sagen wir mal, ich kopiere aus Windoof Explorer ein Link, dieser Link ist wie folgt aufgebaut C:\Pfad\Ordner\
also
Code:
String logname = "C:\Pfad\Ordner\";
So nun kann es Java nicht interpretieren, also muss ich die "\" ind "/" umwandeln.
Code:
String newlogname = logname.replaceAll("\", "/");
Wie man es jetzt oben sehen kann, geht das umwandeln von einem "\" in "/" nicht, sondern nur "\\" in "/".
D.h ich soll mein Pfad in der .ini in "C:\\Pfad\\Ordner\\" umwandeln, und das finde ich etwas dumm... :wink:
Der Backslash ( \ ) hat nur im Java-Quelltext eine besondere Bedeutung. Wenn du eine externe Quelle für Strings hast, dann brauchst du eigentlich den Backslash nicht doppelt angeben. Es sei denn, die externe Quelle wird wie der Quelltext vor dem Einlesen noch ge'parse't, was aber bei .ini-Dateien nicht der Fall ist.
Im Übrigen geht es -wie schon erwähnt- wesentlich schneller, wenn du String.replace(char, char) benutzt, da du nur ein einzelnes Zeichen durch ein anderes ersetzt:
Scheinbar ist es für Euch auch ein Rätsel wieso die \ bei der Umwandlung (s. oben) verschwinden und durch / ersetzt werden? ;-) Seltsam... kann das keiner erklären?
Hab mir das ganze jetzt mal durchgelesen. Wenn es wirklich nur das hier ist
Persuader hat gesagt.:
Habe heute Fragen über Fragen...
Ich habe einen String, welcher einen Baclslash ("\") enthält und möchte diesen Backslash in einen normalen Slash ("/") umwandeln. Gibt es dazu irgend eine spezielle funktion?
Dann verstehe ich den ganzen wirrwarr nicht. Wurde doch schon zig mal erklärt.
Du siehst bei der Ausgabe des Strings nur einen Backslash, in Java stehen dort aber 2 Backslashes, nachdem ein Backslash maskiert ist.
Code:
str2 = str1.replace('\\', '/');
Das heißt nicht, dass du nach 2 Backslashes suchst, sondern nur nach einem ganz normalen. Aber da du einen Backslash wie gesagt maskieren musst, musst du zwei Backslashes eingeben.
Ich weiß, ich wiederhol nur alles, was schon da war, aber so funktioniert es 100pro! Ein kleines Beweisprogramm:
Code:
public class test {
public static void main(String[] args) {
String str1 = "C:\\pfad\\unterpfad\\datei"; // So sieht dein String aus
System.out.println(str1); // Wie du siehst, wird bei der Ausgabe nur ein \ angezeigt, obwohl der String zwei \ in Java enthält
String str2 = str1.replace('\\', '/'); // Jeder \ wird durch ein / ersetzt
System.out.println(str2); // Und alles hat funktioniert ...
}
}
Also anscheinend mag .getProperty() die \ nicht und deshalb werden sie gelöscht wenn man mit .getProperty() was aus einer Datei holt. Wenn man aber 2 \ in der Datei im Pfad angibt, und dann .replace('\\','/') ausführt, dann wird der Pfad richtig angezeigt, nur mit einem \ geht es nicht, da werden alle gelöscht (s. oben).
Tja wenn es nicht anders geht als 2 \ im Pfad anzugeben, habe ich mich entschieden gleich in der Datei die Pfade mit / anzugeben, punkt :wink:
Ich habe im Moment auch das Problem das ich in einem String ein "\" durch ein "/" ersetzen muss.
Der String der aus einer Datei ausgelesen wird dient später als eine Pfad angabe.
Irgendwo in der Datei steht als zum Beispiel "C:\send".
String.replace("\\","/") funktioniert nicht weil der der String nunmal "C:\send" ist und nicht "C:\\senden" :!:
String.replace("\","/") funktioniert auch nicht da \ ja ein geschütztes Zeichen ist. Gib es irgendeine Möglichkeit das Problem zu lösen?
Nein das geht schon (es steht wirklich C:\... drin - die Properties Klasse entfernt scheinbar beim Einlesen alle \ aus einem String - vielleicht meinst du das). Hab das Problem inzwischen so gelöst das ich jede Zeile einlese - den String in ein CharArray verwandel und dann in dem Array nach \ suche um es gegen / zu tauschen.
lass dir doch mal den ursprünglichen String ausgeben, direkt nachdem er aus der Datei gelesen ist. Wenn da die Backslashes noch drin sind dann muss auch replace funktionieren.
Vielleicht hängt es davon ab, wie der String eingelesen wird!
Ich habe nämlich exact das gleiche Problem und lese den String aus der Datei mithilfe der Klasse PropertyRessourceBundle.
Dann enthält der ausgelesene String überhaupt gar keine \ mehr.
Replace funktioniert nicht und auch die Variante mit dem CharArray geht nicht!
Vielleicht hängt es davon ab, wie der String eingelesen wird!
Ich habe nämlich exact das gleiche Problem und lese den String aus der Datei mithilfe der Klasse PropertyRessourceBundle.
Dann enthält der ausgelesene String überhaupt gar keine \ mehr.
Replace funktioniert nicht und auch die Variante mit dem CharArray geht nicht!
das wird nix bringen, PropertyResourceBundle benutzt Properties zum einlesen. wen ndann müsstest du ne eigene Properties.load() methode implementieren, und dein eignes resourcebundle dazu zwignen die zu benutzen.
wenn man klug is oder besseres zu tun hat wird man einfach / oder \\ in die properties dateien schrieben :autsch:
warum fummeln die benutzer des programms in den dateien rum? is nich sehr benutzerfreundlich. ich dachte in dem satz eigentlich an die programmierer.
was der zweite satz damit zu tun hat versteh ich nich.