Jag måste bara kort få meddela att det ibland går litet orm i escapandet av strängar. Framför allt om man pysslar med reguljära uttryck i Java.
Idag skulle jag escapea alla backslashar (\) i en sträng. Jag ville helt enkelt byta ut dom mot två backslashar (\\).
I perl hade jag,
$txt = 'hej\n'
$txt =~ s/\\/\\\\/g
print $txt
> hej\\n
vilket ju känns ganska rakt på. Backslashen i sig måste escapeas med en backslash (\\). För att få två backslashar i den resulterande strängen blir det således (\\\\).
Nu över till Java:
String txt = "hej\\n";
txt = txt.replaceAll("\\\\", "\\\\\\\\");
System.out.println(txt);
> hej\\n
Härligt va?! ;) Anledningen till alla backslashar är att man först måste escapea backslashen i Javasträngen och sedan en gång till i det reguljära uttrycket.
För att få två backslashar måste man alltså
2 * 2sträng * 2regexp = 8
-
Inga kommentarer:
Skicka en kommentar