7

在 scala 中,“here docs”以 3 开头和结尾"

val str = """Hi,everyone"""

但是如果字符串包含"""? 如何输出Hi,"""everyone

4

4 回答 4

9

由于多行字符串文字中的 unicode 转义\u0022对您没有帮助,因为它们将被评估为相同的三个引号,您唯一的机会就是像这样连接:

"""Hi, """+"""""""""+"""everyone"""

好消息是,scala 编译器足够聪明,可以解决这个问题,因此它会在编译时生成一个字符串。

至少,是这么scala -print说的。

object o {
  val s = """Hi, """+"""""""""+"""everyone"""
  val t = "Hi, \"\"\"everyone"
}

并使用scala -print→</p>

Main$$anon$1$o.this.s = "Hi, """everyone";
Main$$anon$1$o.this.t = "Hi, """everyone";

但是请注意,您不能以这种方式输入。输出的格式scala -print似乎仅供内部使用。

不过,可能有一些更简单、更直接的方法来做到这一点。

于 2010-07-26T17:36:38.277 回答
5

这是我在类似问题上发布的完全破解,但它也适用于这里:使用 Scala 的 XML 结构作为中间格式。

val str = <a>Hi,"""everyone</a> text

这将为您提供一个带有三个双引号的字符串。

于 2010-07-26T22:03:41.070 回答
2

你不能

scala heredocs 是原始字符串,如果您需要在字符串中使用三引号,请不要使用任何转义码使用字符串连接添加它们

于 2010-07-26T17:12:09.877 回答
2

据我所知,你不能使用三引号。在规范中,第 1.3.5 节指出:

多行字符串文字是用三引号 """ ... """ 括起来的字符序列。字符序列是任意的,除了它可能仅在最后包含三个或更多连续引号字符。字符不一定是可打印的;也允许换行符或其他控制字符。Unicode 转义与其他任何地方一样工作,但 (§1.3.6) 中的任何转义序列都不会被解释。

所以如果你想在一个字符串中输出三个引号,你仍然可以使用带有转义的单引号字符串:


scala> val s = "Hi, \"\"\"everyone"
s: java.lang.String = Hi, """everyone
于 2010-07-26T17:16:22.713 回答