# String nach Windows / Unix-Normen aufsplitten



## tinella (2. Februar 2006)

*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: 

```
String strSeparator = new String();
strSeparator = String.valueOf(File.separatorChar);
```

und dann so:

```
tempSave = pathToSeparate.split("\\" + strSeparator);
```
_Das funktioniert!_

*Für Unix mit dem Slash mache ich das eigentlich genau gleich, nämlich so:*

```
tempSave = pathToSeparate.split("/" + strSeparator);
```
ABER: Es gibt mir folgende Fehlermeldung aus:

```
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


----------



## elmato (2. Februar 2006)

tinella hat gesagt.:
			
		

> *Hallo Leute*
> 
> 
> ```
> ...


Ich schätze du musst den / "escapen" mit \ schreib mal 

```
tempSave = pathToSeparate.split("\/" + strSeparator);
```
aber du kannst doch per System.getProperty("file.separator"), den Fileseperator erfragen und musst nicht zweimal den gleichen Code schreiben...

```
tempSave = pathToSeparate.split(System.getProperty("file.separator"));
```
sollte odch auf Unix und Win laufen, oder?


----------



## tinella (2. Februar 2006)

_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:

```
java.util.regex.PatternSyntaxException: Unexpected internal error near index 1
\
 ^
```


_Weiss jemand weshalb?_


----------



## elmato (2. Februar 2006)

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*


----------



## Thomas Darimont (2. Februar 2006)

Hallo!


```
/**
 * 
 */
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:

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

Gruss Tom


----------



## tinella (3. Februar 2006)

*DANKE vielmals!*


----------

