来自Perl,我肯定错过了在源代码中创建多行字符串的“here-document”方法:

$string = <<"EOF"  # create a three-line string
text
text
text
EOF

在Java中,当我从头开始连接多行字符串时,我必须在每一行上使用繁琐的引号和加号。

有什么更好的选择吗?在属性文件中定义我的字符串?

编辑:有两个答案说StringBuilder.append()比加号更可取。谁能详细解释一下他们为什么这么想?在我看来,这一点也不可取。我正在寻找一种方法来解决多行字符串不是一级语言结构这一事实,这意味着我绝对不想用方法调用取代一级语言结构(字符串连接与加号)。

编辑:为了进一步澄清我的问题,我根本不关心性能。我关心的是可维护性和设计问题。


当前回答

一个简单的选择是使用SciTE (http://www.scintilla.org/SciTEDownload.html)这样的编辑器编辑java代码,它允许您对文本进行WRAP,以便容易地查看和编辑长字符串。如果你需要转义字符,你只需输入它们。通过关闭“换行”选项,您可以检查字符串是否仍然是一个很长的单行字符串。当然,如果不是,编译器也会告诉你。

Eclipse或NetBeans是否支持编辑器中的文本包装,我不知道,因为它们有太多的选项。但如果没有,这将是一个很好的补充。

其他回答

实际上,下面是我迄今为止见过的最干净的实现。它使用注释将注释转换为字符串变量…

/**
  <html>
    <head/>
    <body>
      <p>
        Hello<br/>
        Multiline<br/>
        World<br/>
      </p>
    </body>
  </html>
  */
  @Multiline
  private static String html;

因此,最终结果是变量html包含多行字符串。没有引号,没有加号,没有逗号,只有纯字符串。

该解决方案可在以下URL… http://www.adrianwalker.org/2011/12/java-multiline-string.html

希望有帮助!

    import org.apache.commons.lang3.StringUtils;

    String multiline = StringUtils.join(new String[] {
        "It was the best of times, it was the worst of times ", 
        "it was the age of wisdom, it was the age of foolishness",
        "it was the epoch of belief, it was the epoch of incredulity",
        "it was the season of Light, it was the season of Darkness",
        "it was the spring of hope, it was the winter of despair",
        "we had everything before us, we had nothing before us",
        }, "\n");

在IntelliJ IDE中,你只需要输入:

""

然后将光标放置在引号内并粘贴字符串。IDE将它扩展为多个连接的行。

使用JDK/12早期访问构建# 12,现在可以在Java中使用多行字符串,如下所示:

String multiLine = `First line
    Second line with indentation
Third line
and so on...`; // the formatting as desired
System.out.println(multiLine);

这将导致以下输出:

第一行 第二行有缩进 第三行 等等……

编辑: 推迟至java 13

另一种方法是将长字符串存储在外部文件中,然后将文件读入字符串。