android - Kotlin 适用于 String 未按预期工作

标签 android kotlin syntactic-sugar

我正在尝试使用 kotlin 的所有功能,但似乎它们都不起作用,或者可能是我的错。

所以,applyString 不起作用。示例:

val str = someStr.apply {
    toUpperCase()
    if (contains("W")) replace("W", "w")
}

Input -> xywz

Output -> xywz

Expected -> XYwZ

Java 风格:

val str = it.text().toString().toUpperCase()
if (str.contains("W")) str.replace("W", "w")

Input -> xywz

Output -> XYwZ

Expected -> XYwZ

我做错了吗?

最佳答案

其实apply不返回您计算的值。您可能更愿意使用:run , letwith .此外,可能更重要的是,您没有指定 else 路径。这可能会返回一个 Unit 而不是一个值,因此您可能需要指定应返回的内容。最后,这些方法中的调用没有被链接。首先调用 toUpperCase 不会改变任何东西......它几乎是死代码......所以你可能想要写这样的东西:

val str = with(someStr) {
  toUpperCase().run {
    if (contains("W")) replace("W", "w")
    else this
  }
}

但是我只是使用 run/let/with 来演示它的用法,因为您已经使用过 apply...您显示的 Java 方式在这方面当然更容易,最简单的可能解决方案是 TheOperator 刚刚展示的那个首先省略您的条件,因为 replace 默认情况下区分大小写。

关于android - Kotlin 适用于 String 未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51770167/

相关文章:

javascript - 有没有一种更简洁的方法可以将方法绑定(bind)到 Javascript 中的对象?

java - 如何以编程方式获取电话号码?

kotlin - Kotlin:为什么“未解析的引用”是密封类的子类的构造函数参数

android - 如何完全使用python开发Android应用程序?

constructor - Kotlin 构造函数 : primary and secondary

kotlin - 如何在Gradle插件中表达项目依赖关系?

java - Java 'for each' 循环如何工作?

scala - 宏是否可以在 Scala 中进行自然链式比较?

java - Android--如何在 googlemap-v2 中画一条线

android - Android:在WebView中更改YouTube链接名称