(Это ответ на комментарий ОП по исходному вопросу; я полностью согласен с тем, что PreparedStatement является инструментом для этой работы, а не регулярными выражениями.)
Когда вы говорите \n
, вы имеете в виду последовательность \
+ n
или фактический символ перевода строки? Если это \
+ n
, задача довольно проста:
s = s.replaceAll("['\"\\\\]", "\\\\$0");
Чтобы соответствовать одному обратному слешу во входных данных, вы помещаете четыре из них в строку регулярного выражения. Чтобы поместить один обратный слеш в вывод, вы помещаете четыре из них в строку замены. Предполагается, что вы создаете регулярные выражения и замены в форме литералов Java String. Если вы создаете их любым другим способом (например, читая их из файла), вам не нужно делать все это с двойным экранированием.
Если у вас есть символ перевода строки на входе, и вы хотите заменить его на escape-последовательность, вы можете сделать второй проход по вводу с помощью этого:
s = s.replaceAll("\n", "\\\\n");
Или, может быть, вы хотите две обратные косые черты (я не совсем уверен в этом):
s = s.replaceAll("\n", "\\\\\\\\n");