Простой способ добавить escape-символы в строку - PullRequest
2 голосов
/ 12 января 2010

Есть ли у кого-нибудь простой инструмент, который может преобразовать неэкранированную строку в экранированную строку?

Например, я пытаюсь вставить следующие данные в тип данных Java String:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

Я должен вручную добавить косую черту:

<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>

Тогда я могу вставить в свой код Java:

String xml="<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>";

Добавление косых черт становится очень раздражающим, когда это строка размером 3 МБ. Я знаю, что поиск / замена могут работать во многих инструментах, но я делаю это так часто, что мне нужен еще более быстрый способ.

Это должно быть общей проблемой. Что делает большинство разработчиков? Я думаю, что хороший макрос Emacs мог бы добиться цели, но я не видел ничего очевидного.

Ответы [ 6 ]

3 голосов
/ 12 января 2010

Если это строка размером 3 МБ, я бы прочитал ее из файла вместо жесткого кодирования в исходном коде.

2 голосов
/ 12 января 2010

StringEscapeUtils действительно хорошо

2 голосов
/ 12 января 2010

Взгляните на prin1-to-string.

Например, при вызове следующей команды будет вставлен / вставлен последний убитый / сохраненный / вырезанный текст в виде экранированной строки:

(defun yank-escaped-string ()
  (interactive)
  (insert (prin1-to-string (substring-no-properties (current-kill 0)))))

Имейте в виду, что механизм экранирования предназначен для создания строк, которые будут читать Elisp, с соглашениями, которые могут быть похожи на вашу цель, но не совсем одинаковы.

2 голосов
/ 12 января 2010

Регулярные выражения.

s/(?=["\\])/\\/g

Вы можете заполнить класс символов любыми другими символами, которые хотите экранировать.

0 голосов
/ 12 января 2010

В поддержку ответа @Mark Bayer приведена однострочная строка для чтения содержимого файла в строку.

String s = org.apache.commons.io.FileUtils.readFileToString("someFile");

Вот Javadoc для класса Apache Commons FileUtils .

И вы можете тривиально реализовать эквивалентную функциональность с нуля; например, * +1008 *

StringBuilder sb = new StringBuilder();
Reader r = new BufferedReader(new FileReader("somefile"));
try {
    int ch;
    while ((ch = r.read()) != -1) {
       sb.append((char) ch);
    }
} finally {
    r.close();
}
String s = sb.toString();

Внедрение чудовищно больших строк в исходный код ... даже в качестве одноразового теста ... такой неудачный .

0 голосов
/ 12 января 2010

Apache Betwixt включает для этой цели служебную функцию, здесь .

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