字符串中的美元符号字符

在字符串文字中添加 $字符的最干净的方法是什么?

到目前为止,我想到的最好的解决方案是 """${"$"}...""",它在我看来很丑陋。

29653 次浏览

看起来你粘贴的代码并不正确,因为你只有3个双引号。

不管怎样,最好的方法就是像下面这样避开美元符号:

"\$"

若要转义字符串文字中的美元符号,请使用反斜杠字符:

"\$"

要在 生的字符串文字("""...""")中转义它,您提供的解决方案确实是目前最简单的解决方案。在 bug 追踪器中有一个问题,你可以主演和/或投票支持: KT-2425

在当前的 Kotlin 1.0(和 beta) 中,你可以使用反斜杠 "\$"来转义

这个通过的单元测试证明了这些情况:

@Test public fun testDollar() {
val dollar = '$'


val x1 = "\$100.00"
val x2 = "${"$"}100.00"
val x3 = """${"$"}100.00"""
val x4 = "${dollar}100.00"
val x5 = """${dollar}100.00"""


assertEquals(x5, x1)
assertEquals(x5, x2)
assertEquals(x5, x3)
assertEquals(x5, x4)


// you cannot backslash escape in """ strings, therefore:


val odd = """\$100.00""" // creates "\$100.00" instead of "$100.00"
// assertEquals(x5, odd) would fail
}

所有版本都使字符串 "$100.00",除了末尾的一个奇怪的情况。

对 Kotlin 开发商来说。

我想做的是:

val $name : String

如果这也是你的情况,用这个:

val `$name` : String

要获得多行字符串中的字面美元符号,可以执行以下操作

我为我的罪行道歉:

val nonInterpedValue = "\${someTemplate}"
val multiLineWithNoninterp = """
Hello
$nonInterpedValue
World
""".trimIndent()

正如在其他地方提到的,这是一个变通方法,因为现在你不能在多行字符串中使用美元符号

(我需要这个来使 Groovy 的模板引擎工作: https://www.baeldung.com/groovy-template-engines)