在Java中构建HTML字符串的简单/直接/Heredoc方式

24

在 Python 中,我可以通过三重引号将字符串拼接成 HTML 字符串,而无需担心转义特殊字符,如 < 或 " :

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

在Java中是否有类似的方法?


4
供以后参考,这种类型的东西通常被称为“Here文档”。 - Michael Mrozek
这个答案展示了如何在Eclipse中粘贴多行转义字符串。 - Jeff Axelrod
对于引号:https://dev59.com/sXA75IYBdhLWcg3w6Nr8,对于多行字符串:https://dev59.com/lHNA5IYBdhLWcg3wpvpg - Ciro Santilli OurBigBook.com
6个回答

22

在Java中无法像Python一样完成此操作。但是,如果您使用Eclipse,请转到“窗口->首选项->Java->编辑器->键入”,最后一个复选框是“将文本转义粘贴到字符串文字中”。勾选该复选框。现在,当您将内容粘贴到引号之间时,它将被转义。


6
总会有一个复选框的,呵呵 ;) - das_weezul

2
为了响应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\"}}";

目前我最讨厌 Java 的是缺少 heredocs,但这是一个不错的技巧来减轻痛苦。我会编写正确的字符串,然后使用 Intellij 的“替换选定内容”功能将 ~(比 '`' 更少使用)替换为它。 - WestCoastProjects

1
不会,但一些工具在你粘贴时会自动为你转义,例如eclipse。

不错,我不知道那个!你在Eclipse中怎么做呢?我正在运行Eclipse Galileo,当我粘贴HTML代码时,它只是被复制了。 - das_weezul
1
窗口>首选项>Java>编辑器>键入时检查在插入字符串字面值时转义文本 - Beothorn

1

1

文本块

Java 15引入了文本块功能。详情请参见JEP 378:文本块

将您的材料括在一对三个引号字符中。

String html = """
              <html>
                  <body>
                      <p>Hello, world</p>
                  </body>
              </html>
              """;

你的集成开发环境可能已经更新,以帮助你智能地编辑文本块。例如,IntelliJ提供支持


0
在Java源代码中,双引号是一个特殊字符,用于声明字符串字面量。如果没有转义,您不能在字符串字面量中使用双引号。
一般来说,我会尽量避免在源代码中硬编码字符串,特别是如果我发现自己经常这样做的话 - 正如您所指出的,它们很难处理作为源代码,并且它们可能会相当容易地更改,在这种情况下,您可以不重新编译。如果您不需要向文本数据提供运行时部分,则可以使用简单的方法从属性文件中读取数据,或者您可以使用模板引擎(例如Apache Velocity)将字符数据保持分离并在运行时仍然替换变量 - 链接用户指南中的几个示例正是这样做的HTML。

1
我完全同意,但是为了快速测试(以确定错误),我总是喜欢掌握一些快速而不太规范的技巧。;o) - das_weezul
同意 - 一切都取决于上下文。听起来在这种情况下Eclipse技巧是最好的! - brabster
嵌入式的heredoc在我的开发流程中是一个核心部分,特别是在测试用例和配置相关逻辑中。我很幸运有6年没有碰Java了,但现在回来却很痛苦,因为这个问题一直存在。上面提到的用其他东西替换双引号的技巧可能是目前最不痛苦的hack方法。 - WestCoastProjects

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接