Необработанные строки в Java - для регулярного выражения, в частности

Есть ли способ использовать необработанные строки в 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 имеет плагин для включения этого.)