Простой / Прямой / Heredoc способ построения строки HTML в Java

В python я могу создать строку HTML, не беспокоясь об экранировании специальных символов, таких как ‹или", просто заключив строку в тройные кавычки, например:

html_string = """
<html>
<body>
<p>My text with "quotes" and whatnot!<p>
</body>
</html>
"""

Есть ли аналогичный способ сделать это в Java?


person das_weezul    schedule 20.04.2010    source источник
comment
Для справки в будущем такие вещи обычно называются heredocs.   -  person Michael Mrozek    schedule 21.04.2010
comment
В этом ответе показано, как вставлять многострочные экранированные строки в Eclispe.   -  person Jeff Axelrod    schedule 09.03.2012
comment
Для цитат: stackoverflow.com/questions/3034186/ для многострочного: stackoverflow.com/questions/878573/java-multiline-string   -  person Ciro Santilli 新疆再教育营六四事件ۍ    schedule 20.03.2015


Ответы (5)


Это невозможно сделать на Java, как на Python. Однако, если вы используете Eclipse, перейдите в Window-> Preferences-> Java-> Editor-> Typing. Последний флажок - «Экранировать текст при вставке в строковый литерал». Проверь это. Теперь, когда вы вставляете, когда курсор находится между кавычками, он будет экранирован.

person Adam    schedule 20.04.2010
comment
Где-то всегда есть флажок; о) - person das_weezul; 21.04.2010

Чтобы повторить трюк Бенджисмита из аналогичного вопроса, вы можете использовать альтернативный символ и впоследствии заменить его:

String myString = "using `backticks` instead of quotes".replace('`', '"');

Я нашел это полезным, когда писал тесты с JSON

String json = "{`kind`:`file`,`sid`:802,`rid`:5678 ,`attrs`:{`name`:`FILE-WG-2468`}}".replace('`', '"');
// vs
String json = "{\"kind\":\"file\",\"sid\":802,\"rid\":5678 ,\"attrs\":{\"name\":\"FILE-WG-2468\"}}";
person jcadcell    schedule 21.10.2016
comment
Отсутствие heredocs в настоящее время является элементом, который я больше всего ненавижу в java, но это хороший способ уменьшить боль. Я составлю правильную строку, а затем использую Intellij replace в выделении, чтобы сказать ~ (используется реже, чем '' ') - person WestCoastProjects; 06.01.2020

Нет, но некоторые инструменты избегают этого, когда вы вставляете его, например, eclipse.

person Beothorn    schedule 20.04.2010
comment
Приятно, не знала этого! Как бы вы это сделали в Eclipse? Я запускаю Eclipse Galileo, и когда я вставляю HTML-код, он просто копируется. - person das_weezul; 21.04.2010
comment
Окно ›Настройки› Java ›Редактор› Проверка набора текста Прекращение ввода текста при вставке строкового литерала - person Beothorn; 21.04.2010

Для упомянутой цели серверные страницы Java выполняют трюк даже без троек """ :-)

person rsp    schedule 20.04.2010

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

В общем, я бы попытался избежать таких жестко кодируемых строк в исходном коде, особенно если бы я обнаружил, что делаю это много - как вы заметили, с ними трудно иметь дело как с источником, и они вполне могут быть для изменения, и в этом случае вы можете обойтись без перекомпиляции. Если вам не нужно предоставлять части времени выполнения для текстовых данных, вы можете уйти от чего-то столь же простого, как чтение данных из файла свойств, или вы можете использовать механизм создания шаблонов, например Apache Velocity, чтобы символьные данные были разделены и по-прежнему заменяли переменные во время выполнения - некоторые из примеры в связанном руководстве пользователя делают именно это с HTML.

person brabster    schedule 20.04.2010
comment
Я полностью согласен, но для быстрого теста (чтобы выявить ошибку) мне всегда хотелось иметь в рукаве несколько быстрых и грязных трюков; o) - person das_weezul; 21.04.2010
comment
Согласитесь - все зависит от контекста. Похоже, трюк с Eclipse в данном случае - ftw! - person brabster; 21.04.2010
comment
Встроенные heredoc's - это основная часть моего процесса разработки, особенно в тестовых примерах и логике, связанной с конфигурацией. Я был (к счастью) вдали от Java в течение 6 лет, но возвращаться очень болезненно с этим фронтом и центром. Приведенный выше трюк с заменой двойных кавычек чем-то другим, вероятно, является наименее болезненным на данном этапе. - person WestCoastProjects; 06.01.2020