Android 带转义美元符号的Kotlin传递字符串

Android 带转义美元符号的Kotlin传递字符串,android,kotlin,textview,Android,Kotlin,Textview,在我们的项目中,我想传递带美元符号的字符串。最终结果应该如下所示:~$1300。但是我只得到~其余的不是打印的。通过调试,我发现问题出在美元符号上。我如何传递带美元符号的字符串?逃避美元符号并不能解决这个问题 fun setItem() { bind(valueSubtitle = "~ \$${trx.currencyAmount}") } fun bind(valueSubtitle: String? = null) { val valueSubtitl

在我们的项目中,我想传递带美元符号的字符串。最终结果应该如下所示:
~$1300
。但是我只得到
~
其余的不是打印的。通过调试,我发现问题出在美元符号上。我如何传递带美元符号的字符串?逃避美元符号并不能解决这个问题

fun setItem() {
   bind(valueSubtitle = "~ \$${trx.currencyAmount}")
        }
fun bind(valueSubtitle: String? = null) {
        val valueSubtitleTextView = findViewById(R.id.txtValueSubtitle)
        valueSubtitleTextView.text = valueSubtitle
    }

我没有直接打印带美元符号的字符串的问题。当我试图将这个字符串传递给其他函数,然后才打印它时,我遇到了问题

更新 我进行了调试,发现当我的号码末尾有双零时出现了问题:
189.00或123.00
。这些数字导致了问题。其他数字如
123.40或1152.90
显示正确

更新2
问题是我的文本视图。它在打印不同的双精度数字时表现得很奇怪。当我将
android:layout\u width=“match\u parent”
更改为
android:layout\u width=“wrap\u content”

模板在原始字符串和转义字符串中都受支持时,问题就解决了。如果需要在原始字符串中表示文字字符(不支持反斜杠转义),可以使用以下语法:

itemAmount.bind(valueSubtitle = "~ \${'$'}${trx.currencyAmount}")

语法看起来很糟糕,但可以使用。

您可以尝试使用文字表示法

    fun main(args: Array<String>) {
    val amount = "25"
    val escapedString = "~ ${'$'}$amount"
    printString(escapedString)

}

fun printString( str : String) {
    println(str)
}
fun main(args:Array){
val amount=“25”
val escapedString=“~${'$'}$amount”
打印字符串(转义字符串)
}
趣味打印字符串(str:String){
println(str)
}
试试这个

class MainActivity : AppCompatActivity() {
private val trx: Transaction = Transaction(1300.00)
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    setItem()
}

fun setItem() {
    bind(valueSubtitle = "~ \$${trx.currencyAmount}")
}

fun bind(valueSubtitle: String? = null) {
    val valueSubtitleTextView: TextView = findViewById(R.id.textview)
    valueSubtitleTextView.text = valueSubtitle
}

  class Transaction(var currencyAmount: Double)
}
这应该行得通

fun main(args: Array<String>) {
    val dollar = "~$"
    val amount = 1212
    println("${dollar}${amount}")
}
fun main(args:Array){
val美元=“~$”
val金额=1212
println(“${dollar}${amount}”)
}

您显示的代码没有问题。另外请注意,您可以使用多种方法来避开美元符号,在您的特定情况下,您甚至不需要避开它。只需与以下示例代码进行比较:

data class Container(val amount : Double = 123.00)
fun main() { // used Kotlin 1.3
  val trx = Container()
  listOf("~ \$${trx.amount}", // your variant
         "~ $${trx.amount}", // easier and works too
         """~ $${trx.amount}""", // everything in this string must not be escaped
         "~ ${'$'}${trx.amount}", // actually you may only use this if you require something like shown below (e.g. if you want to print something like $none)
         """~ ${"$"}${trx.amount}""", // similar to the one before
         // variants to print $none:
         "~ \$none",
         "~ ${'$'}none",
         """~ ${'$'}none""",
         """~ $${""}none"""
      )
      .forEach(::println)
}
上面的输出是:

~ $123.0
~ $123.0
~ $123.0
~ $123.0
~ $123.0
~ $none
~ $none
~ $none
~ $none

但这些答案都不能解决你的问题。正如您自己发现的那样,代码中的
$
不是问题所在

我没有直接打印带美元符号的字符串的问题。当我试图将此字符串传递给其他函数,然后才打印它时,我遇到了问题。@Rafael请查看更新的答案。它为我们工作me@Rafael它起作用了吗?我尝试了一个文本视图,它按预期显示
trx.currencyAmount
的类型是什么?你能发布完整的代码吗?因为相同的代码适用于metrx。currencyAmount是DoubleYes,它适用于打印到控制台。但将其设置为TextView不起作用:(@Rafael你检查过TextView是否有问题,因为字符串语法应该可以工作。@Rafael我也检查过TextView,它可以工作我检查过TextView,它可以打印其他内容,但不能打印这些字符串为什么不只是像“$”+“${trx.currencyAmount}”这样的字符串我想知道你的“更新2”不应该是一个答案(然后可能被接受)…
\$
没有问题…显示的答案只是展示了其他方法如何在字符串中设置
$
。但是没有答案包含解决问题的方法…够有趣的是:被接受的答案基本上与您发布的答案相同(但更完整的是,它也显示了活动)。你说得太对了!(版权:海森伯格)