2017-02-14 187 views
0

kotlin我想過濾一個字符串並返回一個只有有效字符的子字符串。假設我們有有效的字符,在kotlin中過濾一個子字符串

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

我如何可以定義一個科特林在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沒有顯示任何專門針對彈簧操作的示例。

+0

我不知道爲什麼這個問題是在-1,有給予好評。 – fred

回答

1
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 
} 
+0

謝謝。我的問題的一部分也沒有使用字符。 IE「(」而不是'('在我的VALID delcaration中。 –