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”不应该是一个答案(然后可能被接受)…\$
没有问题…显示的答案只是展示了其他方法如何在字符串中设置$
。但是没有答案包含解决问题的方法…够有趣的是:被接受的答案基本上与您发布的答案相同(但更完整的是,它也显示了活动)。你说得太对了!(版权:海森伯格)