
Originariamente inviata da
andbin
Il problema non è il primo argomento (cioè "/"). Lo slash / NON è un carattere "speciale" nelle regex. Il problema è il secondo argomento, perché sui Windows File.separator vale \ (come literal "\\") e il back-slash è un carattere speciale nelle regex e anche nell'argomento di sostituzione di replaceAll (vedi javadoc).
Potresti usare il
replace(CharSequence target, CharSequence replacement) che non usa le regex. Ma comunque avresti il problema del caso "\\/" che non risolverebbe.
Una cosa più furba sarebbe fare un replace di tutte le occorrenze di una/più "\" e/o "/" per "aggiustarle" al corretto separator per il S.O.
codice:
String str2 = str.replaceAll("[\\\\/]+", Matcher.quoteReplacement(File.separator));
Questo, tra l'altro, funzionerebbe pure sugli Unix-like nel senso che se avessi un path non ben messo tipo:
"/tmp
/\\prova
\\hello.txt" (qui è scritto letterale, con \ raddoppiato)
lo sistemerebbe comunque bene a "/tmp/prova/hello.txt".