String nach Windows / Unix-Normen aufsplitten

tinella

Erfahrenes Mitglied
Hallo Leute

Ich möchte einen Pfad (String) nach \ sowie / aufsplitten, je nach dem ob das Programm in Unix oder Windows läuft.

Ich mache das für Window so:
Code:
String strSeparator = new String();
strSeparator = String.valueOf(File.separatorChar);

und dann so:
Code:
tempSave = pathToSeparate.split("\\" + strSeparator);
Das funktioniert!

Für Unix mit dem Slash mache ich das eigentlich genau gleich, nämlich so:
Code:
tempSave = pathToSeparate.split("/" + strSeparator);
ABER: Es gibt mir folgende Fehlermeldung aus:
Code:
java.util.regex.PatternSyntaxException: Unexpected internal error near index 2
/ \  ^
statt einfach nix zu separieren!


Weiss jemand was ich ändern muss, damit es funktioniert?

Wie kann ich diesen "Mechanismus" so nutzen, dass es das ganze automatisch je nach Betriebssystem selber merkt und die entsprechenden / oder \ einfügt? Muss ich das noch von Hand abfragen, bsp: wenn / vorhanden dann separier nach / , wenn \ vorhanden dann separier nach \ ?


Danke vielmals
 
Zuletzt bearbeitet:
tinella hat gesagt.:
Hallo Leute

Code:
tempSave = pathToSeparate.split("/" + strSeparator);
ABER: Es gibt mir folgende Fehlermeldung aus:
Code:
java.util.regex.PatternSyntaxException: Unexpected internal error near index 2
/ \  ^
statt einfach nix zu separieren!


Weiss jemand was ich ändern muss, damit es funktioniert?
Ich schätze du musst den / "escapen" mit \ schreib mal
Code:
tempSave = pathToSeparate.split("\/" + strSeparator);
aber du kannst doch per System.getProperty("file.separator"), den Fileseperator erfragen und musst nicht zweimal den gleichen Code schreiben...
Code:
tempSave = pathToSeparate.split(System.getProperty("file.separator"));
sollte odch auf Unix und Win laufen, oder?
 
Alsso... erstmal danke für deine Antwort!

Bei dem Unix-Problem:
\ / Kennt der Compiler nicht, der sagt mir ich muss entweder / oder \\ nehmen aber / geht ja eben nicht! Kein Plan...

Bei der Zusammenfassung für beide Betriebssysteme mit deinem Beispiel gibt er mir fast die selbe Fehlermeldung aus wie bei dem Unixproblem, doch er befindet sich ahnscheinend in Index1 statt wie vorher 2:
Code:
java.util.regex.PatternSyntaxException: Unexpected internal error near index 1
\
 ^


Weiss jemand weshalb?
 
versuch mal für die Unix variante split(\\/); man muss den backslash ja auch noch escapen, sory :/

edit
und die WIn variante müsste mit split(\\\\); funktionieren, aber es muss doch einen generischen weg geben.... *kopfkratz*
 
Zuletzt bearbeitet:
Hallo!

Code:
/**
 * 
 */
package de.tutorials;

import java.util.Arrays;

/**
 * @author daritho
 * 
 */
public class FilePathSplittExample {

    /**
     * @param args
     */
    public static void main(String[] args) {
        String pathWin = "c:\\abc\\def\\ghi\\jkl.exe";
        String pathUnix = "/abc/def/ghi/jkl.sh";
        
        System.out.println(pathWin);
        System.out.println(Arrays.toString(pathWin.split("\\\\|/")));
        
        System.out.println(pathUnix);
        System.out.println(Arrays.toString(pathUnix.split("\\\\|/")));
    }
}

Ausgabe:
Code:
c:\abc\def\ghi\jkl.exe
[c:, abc, def, ghi, jkl.exe]
/abc/def/ghi/jkl.sh
[, abc, def, ghi, jkl.sh]

Gruss Tom
 
Zurück