如何替换不在 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
。
我有一个参考字符串,其中列出了允许的字符。然后我还有输入字符串,不允许的字符应该用固定字符替换,在这个例子中是“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
。