【问题标题】:Kotlin string exists but can't use almost all string functionalityKotlin 字符串存在但不能使用几乎所有字符串功能
【发布时间】:2020-01-30 19:34:24
【问题描述】:

总结:我有一个字符串,我可以从中打印和使用子字符串,但不能使用长度等属性或.toInt()或.compareTo()等函数,为什么会这样?

var s = "20"
val myToast = Toast.makeText(this, s, Toast.LENGTH_SHORT)
myToast.show()
//20

val myToast2 = Toast.makeText(this, s.length, Toast.LENGTH_SHORT)
myToast2.show()
//The app crashes with the error: android.content.res.Resources$NotFoundException: String resource ID #0x2

我可以在字符串s上调用substring,但不能调用length、toInt()、compareTo()等

字符串显然存在,因为我可以打印它并使用子字符串,但如果这是真的,为什么当我尝试使用它的其他属性和函数时我的应用程序会抛出错误?

【问题讨论】:

  • 问题不是你将整数传递给Toast.makeText,所以它通过id查找资源吗?
  • @wobr 我在哪里传递一个 int?据我所知,s 是一个字符串。
  • 编辑,弄明白了,谢谢!

标签: kotlin


【解决方案1】:

Toast.makeText() 有两个重载。一个接受String 作为第二个参数,并显示该字符串。另一个接受Int 作为第二个参数,并显示具有该整数ID 的任何字符串资源。 (通常你会在这里传递R.string.my_string 之类的东西。)

当您在 String 上调用 .length 时,您会得到一个 Int 返回。这意味着您最终会调用第二个重载,然后它会查找 ID 为 2 的字符串资源。那不存在,所以你崩溃了。

如果您只想显示数字 2,则需要再次将其设为字符串。你可以使用.toString()"${s.length}"等等。

【讨论】:

    【解决方案2】:

    在length、toInt()、compareTo()等末尾添加.toString,因为s.length 返回整数:不是字符串

    这是您修改后的答案 var s = "20" val myToast = Toast.makeText(this, s, Toast.LENGTH_SHORT) myToast.show() //20

    val myToast2 = Toast.makeText(this, s.length.toString(), Toast.LENGTH_SHORT) myToast2.show()

    【讨论】:

      猜你喜欢
      • 2021-07-04
      • 1970-01-01
      • 2015-01-05
      • 2011-12-03
      • 1970-01-01
      • 1970-01-01
      • 2015-03-20
      • 2020-07-26
      • 2021-03-28
      相关资源
      最近更新 更多