groovy или java: как заменить '\' на '\\' 'C: \ www \ web-app \ StudyReports \ test.bat' - PullRequest
2 голосов
/ 02 июня 2010

Моя конечная цель - получить строку вроде

def newline = 'C:\\www\web-app\StudyReports\\test.bat'

но моя старая строка имеет только один '\'.

Я пробовал разные способы использования следующего:

def newline = oldline.replaceAll(/\\/,'//')

но это не скомпилировано.

Ответы [ 3 ]

3 голосов
/ 03 июня 2010

На вашем месте я бы заменил обратную косую черту на переднюю:

def newline=oldline.replaceAll(/\\+/, '/')

И Java, и Windows примут косую черту в качестве разделителя файлов, и с ней намного проще работать.

2 голосов
/ 02 июня 2010

В Java вы должны использовать String.replace(CharSequence target, CharSequence replacement), который НЕ основан на регулярных выражениях.

Вы бы написали что-то вроде:

String after = before.replace("\\", "\\\\");

Это удваивается каждые \ в before.

String path = "1\\2\\\\3\\4";
System.out.println(path);
path = path.replace("\\", "\\\\");
System.out.println(path);

Выходные данные выше (, как видно на ideone.com )

1\2\\3\4
1\\2\\\\3\\4
2 голосов
/ 02 июня 2010

Чтобы сопоставить одну обратную косую черту в Java или Groovy, вы должны ввести ее 4 раза, потому что и компилятор, и механизм регулярных выражений используют обратную косую черту в качестве escape-символа. Поэтому, если вы введете "\\\\" как строку в Java, компилятор сгенерирует строку, содержащую два символа \\, которые механизм регулярных выражений интерпретирует как совпадение ровно с одной обратной косой чертой \.

Строка замены должна быть также дважды экранирована , поэтому вы должны ввести 8 обратных слешей в качестве строки замены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...