Base64: Какое худшее возможное увеличение использования пространства?

(Это ответ на комментарий OP по оригинальному вопросу, я полностью согласен с тем, что PreparedStatement является инструментом для этой работы, а не регулярных выражений.)

Когда вы говорите \n, вы имеете в виду последовательность \ + n или фактический символ перевода строки? Если это \ + n, задача довольно проста:

s = s.replaceAll("['\"\\\\]", "\\\\$0");

Чтобы сопоставить одну обратную косую черту во входе, вы поместили четыре из них в строку регулярных выражений. Чтобы поставить обратную косую черту на выходе, вы поместили четыре из них в заменяющую строку. Предполагается, что вы создаете регулярные выражения и замены в виде литералов Java String. Если вы создаете их любым другим способом (например, прочитав их из файла), вам не нужно делать все это двойное экранирование.

Если у вас есть символ перевода строки на входе, и вы хотите чтобы заменить его на escape-последовательность, вы можете сделать второй проход через вход:

s = s.replaceAll("\n", "\\\\n");

Или, может быть, вам нужны две обратные косые черты (я не слишком понятен):

s = s.replaceAll("\n", "\\\\\\\\n");
150
задан Bryan Field 17 January 2011 в 16:27
поделиться