Есть ли способ использовать необработанные строки в Java (без escape-последовательностей)?
(Я пишу довольно много кода регулярных выражений, а необработанные строки сделают мой код более читабельным)
Я понимаю, что язык не дает этого напрямую, но есть ли способ "имитировать" их каким-либо образом?
Ответ 1
Нет, нет.
Как правило, вы должны поместить необработанные строки и регулярные выражения в файл свойств, но у них также есть некоторые требования к escape-последовательности.
Ответ 2
Это обход, если вы используете eclipse.
Вы можете автоматически иметь длинные блоки текста правильно многострочные, а специальные символы автоматически экранируются при вставке текста в строковый литерал
"- вставить здесь-";
если вы включите этот параметр в окне → → → → Редактирование → Ввод текста → "Исключить текст при вставке в строковый литерал"
Ответ 3
Я использую Pattern.quote. И это решает проблему вопроса. Thusly:
Pattern pattern = Pattern.compile(Pattern.quote("\r\n?|\n"));
Метод quote возвращает строку, которая будет соответствовать предоставленному строковому аргументу, для которого возвращаемая строка является правильно указанной строкой для нашего случая.
Ответ 4
Нет (довольно грустно).
Ответ 5
Загрузите исходный текстовый файл в свой класс и прочитайте его с помощью getResourceAsStream (....)
Ответ 6
(Файлы свойств являются общими, но беспорядочными - я рассматриваю большинство регулярных выражений как код и сохраняю его там, где я могу ссылаться на него, и вы должны тоже. Что касается актуального вопроса:)
Да, есть способы обойти плохую читаемость. Вы можете попробовать:
String s = "crazy escaped garbage"; //readable version//
хотя это требует осторожности при обновлении. В Eclipse есть опция, которая позволяет вставлять текст между кавычками, а escape-последовательности применяются для вас. Тактикой было бы сначала отредактировать читаемые версии, а затем удалить мусор и вставить их между пустыми кавычками "".
Время разработки:
Взломайте редактор, чтобы преобразовать их; релиз как плагин. Я проверил вокруг плагинов, но не нашел ни одного (попробуйте выполнить поиск). Там существует взаимно однозначное соответствие между экранированными исходными строками и текстом текстового поля (дисконтирование\n,\r\n). Возможно, выделенный текст с двумя кавычками на концах может быть использован.
String s = "##########
#####";
где # - любой символ, который выделен - перерыв рассматривается как новая строка. Текст, набранный или вставленный в выделенную область, экранируется в "реальном" источнике и отображается так, как если бы они не были. (Точно так же, как Eclipse удаляет вложенный текст, это приведет к удалению введенного текста, а также отобразит его без обратных косых черт.) Удалите один из кавычек, чтобы вызвать синтаксическую ошибку, если вы хотите нормально редактировать. Хм.
Ответ 7
String # getBytes() предоставляет копию внутреннего байтового массива, содержащуюся в каждом отдельном объекте String, который фактически содержит 16-битный UTF -16 encoded String - массив байтов будет содержать одну и ту же строку, преобразованную в соответствии с кодировкой платформы по умолчанию. То, что я говорю, это то, что я думаю, что это так близко к "сырой" строке, какой вы когда-либо можете получить на Java.
Ответ 8
Вы можете написать собственный, неэкранированный читатель свойств и поместить свои строки в файл ресурсов.
Ответ 9
Я лично рассматриваю строки строк, а не код, поэтому мне не нравится их в моем коде, но я понимаю, что непрактичный и непопулярный (да, я это понимаю, вам не нужно кричать на меня).
Учитывая, что нет никакого естественного способа сделать это, я могу придумать две возможности (ну, три, но третье, umm, неестественно).
Поэтому мои личные предпочтения состоят в том, чтобы просто проанализировать файл в строках. Вы можете назвать каждую запись в файле и загрузить их все в хэш-таблицу для легкого доступа из вашего кода.
Второй выбор, создайте файл, который будет предварительно обработан в java-интерфейсе; он может выйти из регулярного выражения, как он это делает. Лично я ненавижу создание кода, но если java файл на 100% никогда не редактируется человеком, это не так уж плохо (реальное зло генерирует файлы, которые вы должны редактировать!)
Третья (сложная и, вероятно, плохая идея): вы можете создать пользовательский документ, который будет извлекать строки из ваших комментариев в текстовый файл или заголовочный файл во время компиляции, а затем использовать один из двух других методов выше, Это сохраняет ваши строки в том же файле, в котором они используются. Это может быть очень сложно сделать правильно, и штрафы за неудачу являются экстремальными, поэтому я даже не подумал бы об этом, если бы у меня не было подавляющей необходимости и какого-то довольно впечатляющего таланта.
Я предлагаю это только потому, что комментарии являются свободной формой, а вещи в теге "pre" довольно безопасны от форматировщиков и других системных урлий. Доклет может извлечь это перед печатью javadocs и даже добавить некоторые из сгенерированных javadocs, которые указывают на использование строк регулярных выражений.
Прежде чем задушить и сказать мне, что это глупая идея - я ЗНАЮ, я просто подумал, что предлагаю это, потому что это интересно, но мое предпочтение, как я сказал выше, - это простой текстовый файл...
Ответ 10
Нет. Но есть подключаемый модуль IntelliJ, который упрощает управление, называемый String Manipulation.
IntelliJ также автоматически удалит строку, вставленную в нее. (Поскольку @Dread указывает, Eclipse имеет плагин для включения этого.)