在kotlin中过滤子字符串

jhkqcmku  于 2022-11-30  发布在  Kotlin
关注(0)|答案(2)|浏览(220)

kotlin中,我想过滤一个字符串,返回一个只包含有效字符的子字符串。

valid = listOf('A', 'B', 'C')

如何在kotlin中定义一个fcn,以最简洁的方式过滤字符串并只保留有效字符?例如,

'ABCDEBCA' --> 'ABCBCA'
'AEDC'     --> 'AC'

如果不使用字符串数组,很难找到一种规范的方法来执行此操作。

import kotlin.text.filter

class Test(){
    val VALID = listOf("A", "B", "C")

    fun filterString(expression: String): String{
         expression.filter(x --> !VALID.contains(x)) #Doesn't work
    }
}

filter docs没有显示任何专门用于Spring操作的示例。

gzszwxb4

gzszwxb41#

val VALID = setOf('A', 'B', 'C') // lookup in a set is O(1), whereas it's O(n) in a list. The set must contain Chars, not Strings
val expression = "ABCDEFEDCBA"
val filtered = expression.filter { VALID.contains(it) }
println(filtered)
// ABCCBA

或者

val VALID = setOf('A', 'B', 'C')

fun filterString(expression: String) = expression.filter { it in VALID }

fun main(args: Array<String>) {
    val expression = "ABCDEFEDCBA"
    val filtered = filterString(expression)
    println(filtered)
    // ABCCBA
}
9udxz4iz

9udxz4iz2#

如果你有一个很长的字符集,你可以把它们加入一个字符串中,然后把它转换成一个集合:

val VALID = "ABC".toSet()

fun filterString(expression: String) = expression.filter { it in VALID }

fun main(args: Array<String>) {
    val expression = "ABCDEFEDCBA"
    val filtered = filterString(expression)
    println(filtered)
    // ABCCBA
}

相关问题