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