Строка должна быть
"[^\\\\]\\\\[^\\\\]"
Вы должны четырехкратные обратные слэши в константе String, которая предназначена для регулярных выражений; если вы только удвоите их, они будут спасены для строки, но не для регулярного выражения.
Таким образом, фактический код будет
myString = myString.replaceAll("([^\\\\])\\\\([^\\\\])", "$1\\\\$2");
Обратите внимание, что при замене четырехкратный обратный слеш теперь интерпретируется как два обратных слеша, а не как один, поскольку механизм регулярных выражений не анализирует его. анализирует его, так как он должен проверять обратные ссылки.
Редактировать: Выше предполагалось, что во входной строке был литерал \n
, который представлен в строковом литерале как "\\n"
. Поскольку он, очевидно, имеет вместо этого новую строку (представленную как "\n"
), правильная подстановка будет
myString = myString.replaceAll("\\n", "\\\\n");
Это необходимо повторить для любых других специальных символов (\t
, \r
, \0
, \\
и т. Д.). Как и выше, строка замены выглядит точно так же, как строка регулярного выражения, но не так.