如何替换不在 kotlin 中的引用列表中的字符串字符

How to replace string characters that are not in a reference list in kotlin

我有一个参考字符串,其中列出了允许的字符。然后我还有输入字符串,不允许的字符应该用固定字符替换,在这个例子中是“0”。

我可以使用过滤器,但它会完全删除字符,不提供替换。请注意,这与字母数字无关,有允许的非字母数字字符,也有不允许的字母数字字符,referenceStr 恰好是任意的。

var referenceStr = "abcdefg"
var inputStr = "abcqwyzt"
inputStr = inputStr.filter{it in referenceStr}

这产生:

"abc"

但我需要:

"abc00000"

我也考虑过替换,但当你有一个完整的不允许的字符参考列表时,它看起来更像是。我的情况正好相反。

给定:

val referenceStr = "abcd][efg"
val replacementChar = '0'
val inputStr = "abcqwyzt[]"

您可以使用正则表达式 [^<referenceStr>] 执行此操作,其中 <referenceStr> 应替换为 referenceStr:

val result = inputStr.replace("[^${Regex.escape(referenceStr)}]".toRegex(), replacementChar.toString())
println(result)

注意Regex.escape是为了确保referenceStr中的字符全部按字面解释。

或者,使用 map:

val result = inputStr.map {
    if (it !in referenceStr) replacementChar else it
}.joinToString(separator = "")

在 lambda 中决定是将当前字符“it”转换为 replacementChar 还是它本身。 map 创建了一个 List<Char>,所以你需要使用 joinToString 使结果再次成为 String