我正在尝试使用 kotlin 的所有功能,但似乎它们都不起作用,或者可能是我的错。
所以,apply
到 String
不起作用。示例:
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
, let
或 with
.此外,可能更重要的是,您没有指定 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/