用作参数Kotlin

时间:2019-05-10 23:30:13

标签: string kotlin replace

我希望使用正则表达式帮助下找到的其他字符串替换字符串的某些部分。为了生成替换字符串,我必须编写一个函数。下面是我要在其中替换“ {#string}”的字符串。

var testString = "https://www.google.com/solution?region={america}&&country={usa}&&language={english}"

出于测试目的,我尝试了以下效果良好的方法:

testString = testString.replace(regex, "")

但是我不想在""那里有一个块或函数,该块或函数根据键(即地区,国家和语言)生成替换字符串并返回。以下是我尝试过的方法以及出现的错误。我在语法上缺少什么?

testString = testString.replace(regex, fun() : String {
    return ""
}) 

错误:

enter image description here

2 个答案:

答案 0 :(得分:1)

您传递给replace的匿名函数的签名错误。由于错误消息指出,该函数的类型必须为(MatchResult) -> CharSequence

这是可行的,因为StringCharSequence的子类:

val result = "Some String".replace(Regex("[S]"), fun(mr: MatchResult) : String {
    return "s"
}) // result will be "some string"

注意:除了匿名功能,您还可以使用lambda来推断参数并返回类型:

val result = "Some String".replace(Regex("[S]")) {
    "s"
} 

然后MatchResult将以it的形式提供。

答案 1 :(得分:0)

这应该有效:

string.replace(regex) { /*do your logic here*/ }

您还可以使用函数访问匹配结果,它应该返回一个CharSequence:

string.replace(regex) { matchResult -> "" }

或引用已声明的函数

string.replace(regex, ::doMagic)

fun doMagic(matchResult: MatchResult): CharSequence {
    /*
     *some cool stuff
     */
    return ""
 }