Simple/Direct/Heredoc способ построения строки HTML в Java

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

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

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

Ответ 1

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

Ответ 2

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

Ответ 4

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

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

Ответ 5

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

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\"}}";