måndag 9 juni 2008

\\\\\\\\

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: