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

时间:2018-09-27 04:31:47

标签: android kotlin textview

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

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

我没有直接打印带有美元符号的字符串的问题。当我尝试将此字符串传递给其他函数时,只有在打印后才出现问题。

更新 我进行了调试,发现我的数字末尾有两个双零:189.00 or 123.00。这些数字导致问题。其他数字,例如123.40 or 1152.90正确显示。

更新2 问题出在我的TextView上。当打印不同的双数时,它的表现很奇怪。当我将android:layout_width="match_parent"更改为android:layout_width="wrap_content"

时,此问题已解决。

5 个答案:

答案 0 :(得分:1)

模板在原始字符串转义字符串中均受支持。如果您需要在原始字符串(不支持反斜杠转义)中表示文字 $ 字符,则可以使用以下语法:

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

看起来语法很差,但可以使用

答案 1 :(得分:1)

您可以尝试使用文字表示形式。

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

}

fun printString( str : String) {
    println(str)
}

答案 2 :(得分:1)

尝试一下

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)
}

答案 3 :(得分:1)

您显示的代码没有错。还要注意,您可以使用多种方法来转义美元符号,在您的特定情况下,甚至不需要转义美元符号。只需与以下示例代码进行比较:

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

但是这些答案都不是解决您问题的方法。既然发现自己不是问题,那么代码中的$就不是问题了...

答案 4 :(得分:0)

这应该有效。

fun main(args: Array<String>) {
    val dollar = "~$"
    val amount = 1212
    println("${dollar}${amount}")
}