Отфильтровать подстроку в котлине

В kotlin Я хотел бы отфильтровать строку и вернуть подстроку только допустимых символов. Скажем, у нас есть действительные символы,

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

Как я могу определить fcn в kotlin самым лаконичным способом отфильтровать строку и сохранить только действительные символы? Например,

'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
    }
}

Фильтр документов не показывает никаких примеров специально для пружинных манипуляций.

2 ответа

Решение
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
}

Если у вас есть длинный набор символов, вы можете объединить их в строку и преобразовать в набор:

      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
}
Другие вопросы по тегам