Vragen over tekenreeksmanipulatie

Ik heb een string zoals " C: \ Program Files \ Directory \ Something.txt " en ik zou het willen converteren naar " C: \\ Program Files \\ Directory \\ Something. txt "Voeg dus in principe \ toe waar een \ wordt aangetroffen. Is de beste manier om dit te benaderen met behulp van indexOf en de reeks te splitsen in sustrings en vervolgens opnieuw aaneen te schakelen of is er een meer efficiënte manier om dit in Java te doen?

1

5 antwoord

String s = "C:/Program Files/Directory/Something.txt";
String s2 = s.replaceAll("/", "//");
// => "C://Program Files//Directory//Something.txt"

[Edit]

Als de string backslashes heeft, wordt het echt leuk omdat dat het escape-teken is van de reguliere expressie. Dit zou moeten werken:

String s = "C:\\Program Files\\Directory\\Something.txt";
s.replaceAll("\\\\", "\\\\\\\\");
// => "C:\\\\Program Files\\\\Directory\\\\Something.txt"

Houd er rekening mee dat er vier backslashes zijn in de regex (twee opeenvolgende paren om twee letterlijke backslashses te krijgen) en dan acht in de vervangende tekenreeks, omdat backslashes ook escape-tekens zijn voor letterlijke tekenreeksen.

2
toegevoegd
Als u backslashes gebruikt, is het verhaal anders, omdat dat teken speciaal is voor reguliere expressies, zoals u in uw opmerking vermeldt.
toegevoegd de auteur maerics, de bron
Ja ik heb geprobeerd alles te vervangen, maar het gaf een foutmelding en het heeft waarschijnlijk te maken met \ het zijn van een escape-karakter " String filePath =" C: \\ Programmabestanden \\ Directory \\ Something.txt "; Systeem. out.println (filePath); String filePath2 = filePath.replaceAll ("\\", "\\\\"); System.out.println (filePath2);
toegevoegd de auteur Eosphorus, de bron
de fout naar het bovenstaande is Uitzondering in thread "main" java.util.regex.PatternSyntaxException: Onverwachte interne fout nabij index 1
toegevoegd de auteur Eosphorus, de bron
je hebt de backslashes verkeerd getypt. Dus kunnen we nog steeds de vervanging gebruiken om dit op de een of andere manier te overwinnen?
toegevoegd de auteur Eosphorus, de bron
Eigenlijk zoals mijn vriend zojuist opmerkte, is de \ een escape-teken in zowel de tekenreeks als in regex. Vandaar dat String.replaceall niet werkte. Om te bereiken wat ik probeer te doen, moet ik ofwel String filePath2 = filePath.replace ("\\", "\\\\"); doen, die geen reguliere expressies gebruikt of doe `String filePath2 = filePath.replaceAll ("\\\\", "\\\\\\\\\
toegevoegd de auteur Eosphorus, de bron

U kunt de eigenschap File.separator gebruiken om deze meer cross-platform te maken:

String input = "C:/Program Files/Directory/Something.txt";
String result = input.replaceAll(File.separator, File.separator + File.separator);
1
toegevoegd
String str = "C:/Program Files/Directory/Something.txt";
str = str.replaceAll("/","//");
0
toegevoegd

U kunt hiervoor String.replaceAll gebruiken.

0
toegevoegd
String s = "C:/Program Files/Directory/Something.txt";
s = s.replace("/", "//");

This will replace all / in the string with //

0
toegevoegd