Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 从字符串中删除不必要的部分_Kotlin - Fatal编程技术网

Kotlin 从字符串中删除不必要的部分

Kotlin 从字符串中删除不必要的部分,kotlin,Kotlin,我正在使用一个无法更改的客户端,它向我发送的数据如下所示: "BOOKING - PAID (price.amount=70, price.currency=EUR)" 我只想从中提取70欧元 在科特林做这件事最好的方法是什么?我没有找到任何用于字符串的removeAll(“,”,…)函数,仅替换,但必须将它们链接起来以删除price.amount和price.currency 编辑: 需要付费预订(70欧元),实际上,忘了这一部分。这听起来像是正则表达式的工作 fun main(args:

我正在使用一个无法更改的客户端,它向我发送的数据如下所示:

"BOOKING - PAID (price.amount=70, price.currency=EUR)"
我只想从中提取
70欧元

在科特林做这件事最好的方法是什么?我没有找到任何用于字符串的
removeAll(“,”,…)
函数,仅替换,但必须将它们链接起来以删除
price.amount
price.currency

编辑:


需要付费预订(70欧元),实际上,忘了这一部分。

这听起来像是正则表达式的工作

fun main(args: Array<String>) {
    val str = "BOOKING - PAID (price.amount=70, price.currency=EUR)"

    // The expressions between parentheses will map to groups[1], groups[2] and groups[3] respectively
    val reg = Regex("""(.*) \(price\.amount=([0-9]+), price\.currency=([A-Z]+)\)""")


    // Apply the regular expression on the string
    val results = reg.find(str)

    results?.groupValues?.let { groups ->
        // If results and groupValues aren't null, we've got our values!
        val type = groups[1]
        val price = groups[2]
        val currency = groups[3]

        println("$type ($price $currency)") // BOOKING - PAID (70 EUR)
    }

    // Or as suggested by @Roland:
    results?.destructured?.let { (type, price, currency) ->
        println("$type ($price $currency)") // BOOKING - PAID (70 EUR)
    }
}
fun main(args:Array){
val str=“预订-已付(价格.金额=70,价格.货币=欧元)”
//括号之间的表达式将分别映射到组[1]、组[2]和组[3]
val reg=Regex(“”(.*)\(价格\金额=([0-9]+),价格\货币=([A-Z]+)\)
//在字符串上应用正则表达式
val结果=注册查找(str)
结果?.groupValues?.let{groups->
//如果results和groupvalue不为null,我们就得到了我们的值!
val类型=组[1]
val价格=组[2]
val货币=组[3]
println($type($price$currency)///预订-已支付(70欧元)
}
//或者按照@Roland的建议:
结果?.destructured?.let{(类型、价格、货币)->
println($type($price$currency)///预订-已支付(70欧元)
}
}
正则表达式允许您将字符串作为条目,并在其中查找模式。它们在所有语言中都很常用,你可以在各地找到更多关于它们的信息


编辑:针对更新的问题进行编辑。我选择将
“预订-付费”
视为一个字符串,但根据您的粒度需求,有无数种方法可以做到这一点;老实说,在这一点上,正则表达式可能有点矫枉过正

这听起来像是正则表达式的工作

fun main(args: Array<String>) {
    val str = "BOOKING - PAID (price.amount=70, price.currency=EUR)"

    // The expressions between parentheses will map to groups[1], groups[2] and groups[3] respectively
    val reg = Regex("""(.*) \(price\.amount=([0-9]+), price\.currency=([A-Z]+)\)""")


    // Apply the regular expression on the string
    val results = reg.find(str)

    results?.groupValues?.let { groups ->
        // If results and groupValues aren't null, we've got our values!
        val type = groups[1]
        val price = groups[2]
        val currency = groups[3]

        println("$type ($price $currency)") // BOOKING - PAID (70 EUR)
    }

    // Or as suggested by @Roland:
    results?.destructured?.let { (type, price, currency) ->
        println("$type ($price $currency)") // BOOKING - PAID (70 EUR)
    }
}
fun main(args:Array){
val str=“预订-已付(价格.金额=70,价格.货币=欧元)”
//括号之间的表达式将分别映射到组[1]、组[2]和组[3]
val reg=Regex(“”(.*)\(价格\金额=([0-9]+),价格\货币=([A-Z]+)\)
//在字符串上应用正则表达式
val结果=注册查找(str)
结果?.groupValues?.let{groups->
//如果results和groupvalue不为null,我们就得到了我们的值!
val类型=组[1]
val价格=组[2]
val货币=组[3]
println($type($price$currency)///预订-已支付(70欧元)
}
//或者按照@Roland的建议:
结果?.destructured?.let{(类型、价格、货币)->
println($type($price$currency)///预订-已支付(70欧元)
}
}
正则表达式允许您将字符串作为条目,并在其中查找模式。它们在所有语言中都很常用,你可以在各地找到更多关于它们的信息


编辑:针对更新的问题进行编辑。我选择将
“预订-付费”
视为一个字符串,但根据您的粒度需求,有无数种方法可以做到这一点;老实说,在这一点上,正则表达式可能有点矫枉过正

通过字符串操作不使用正则表达式,并假设这是一种模式:

fun main(args: Array <String> ) {
    val str = "BOOKING - PAID (price.amount=70, price.currency=EUR)"

    val type = str.substringBefore("(").trim()
    val price =  str.substringBeforeLast(",").substringAfter("=")
    val currency = str.substringAfterLast("=").substringBefore(")")

    val result = "$type ($price $currency)"

    println(result)
}

编辑:我使用
str.substringBeforeLast(“,”
)获取价格,如果
可以用作数字小数部分的delimeter,而不需要通过字符串操纵正则表达式,并假设这是一种模式:

fun main(args: Array <String> ) {
    val str = "BOOKING - PAID (price.amount=70, price.currency=EUR)"

    val type = str.substringBefore("(").trim()
    val price =  str.substringBeforeLast(",").substringAfter("=")
    val currency = str.substringAfterLast("=").substringBefore(")")

    val result = "$type ($price $currency)"

    println(result)
}

编辑:我使用
str.substringBeforeLast(“,”
)来获取价格,如果
可以用作数字小数部分的delimeter

考虑一下,当你更新了你的问题以真正从字符串中删除一部分时,以下是从给定字符串中删除多个字符串的一些方法:

使用正则表达式:

input.replace("""(price\.(amount|currency)=|,)""".toRegex(), "")
使用要删除的字符串列表:

sequenceOf(input, "price.amount=", ",", "price.currency=")
    .reduce { acc, rm -> acc.replace(rm, "") }
// alternatively using var:
var input = TODO()
sequenceOf("price.amount=", ",", "price.currency=")
    .forEach { input = input.replace(it, "") }

不过:大多数时候,我宁愿选择另一种方式:提取你需要的信息,然后打印出来。否则,您可能会开始公开一开始不想公开的服务的答案。

考虑一下,当您更新问题以真正从字符串中删除一部分时,以下是一些从给定字符串中删除多个字符串的方法:

使用正则表达式:

input.replace("""(price\.(amount|currency)=|,)""".toRegex(), "")
使用要删除的字符串列表:

sequenceOf(input, "price.amount=", ",", "price.currency=")
    .reduce { acc, rm -> acc.replace(rm, "") }
// alternatively using var:
var input = TODO()
sequenceOf("price.amount=", ",", "price.currency=")
    .forEach { input = input.replace(it, "") }

不过:大多数时候,我宁愿选择另一种方式:提取你需要的信息,然后打印出来。否则,您可能会开始公开最初不想公开的服务的答案。

您也可以通过
destructured
,例如:
reg.find(str)?.destructured?让{(price,currency)->“$price$currency”}?运行(::println)?:println(“无匹配”)
@Roland我每天都更爱Kotlin一点。@ohwelppp当然,我会尝试更新答案。仅供参考,这只是一个用正则表达式表示的问题,“这里会有一些文本,这就是它应该看起来的样子”。你也可以通过
destructured
,例如:
reg.find(str)?.destructured?让{(price,currency)->“$price$currency”}?运行(::println)?:println(“不匹配”)
@Roland我每天都更喜欢Kotlin一点。@ohwelppp当然,我会尝试更新答案。仅供参考,这只是一个用正则表达式表示的问题,“这里会有一些文本,这就是它应该看起来的样子”。从那里开始,它将为您获取该文本。然而,
removeAll
(如果它存在的话)并不是最好的方法。。。如果可能的话,我更愿意使用正则表达式或以另一种方式解析它……但是
removeAll
(如果它存在的话)并不是最好的方法。。。如果可能的话,我更愿意使用正则表达式或以另一种方式解析它。。。