原始字符串中的换行符是否依赖平台?

时间:2017-10-21 09:04:03

标签: string kotlin cross-platform line-breaks rawstring

原始字符串中的换行符是否依赖于平台?

val a = "one\ntwo";

val b = """one
two"""

println(a == b)

换句话说,上面的println声明是否可以保证打印true

2 个答案:

答案 0 :(得分:1)

不幸的是,我无法找到任何具体说明这一点的消息来源。感觉应该是文档中的内容。

但是,IntelliJ中的意图操作是将原始字符串转换为普通字符串。我认为应该安全地假设此操作不应该改变代码的含义(或者如果它改变了,那么应该将其作为错误提交)。如果您在带有换行符的原始字符串上尝试此操作,则可以看到它用\n字符替换换行符。

您可以查看操作的来源here,以及期望它将换行符转换为\n here (before)here (after)的测试。

修改:here对有关原始字符串的问题发表评论(据我所知),原始字符串中包含\n行结尾。

答案 1 :(得分:0)

我不认为它保证ab是平等的。 Spec有关于原始字符串文字的说法:

  

Kotlin有两种类型的字符串文字:可能在其中包含转义字符的转义字符串以及可以包含换行符和任意文本的原始字符串。

  1. 规范并没有说它是相同的
  2. 该规范区分了"换行符"和"任意文字"
  3. 在@ zsmb13到Kotlin讨论的链接中,Kotlin工程师说编译器不保留原始字符串中的换行符(??)。
  4. 因此,如果我编写代码来跨平台工作,我会明确(至少在它们之前)。