[英]How do I replace letters with numbers using the replace function in kotlin inside a lambda expression
mood = "leet"
modifier = { message ->
val regex = """(L|e|t)""".toRegex()
//Clueless about what to do after this
}
到目前为止,这就是我想出的,书 BIG NERD RANCH KOTLIN 第 2 版中的问题说“leet(或 1337):叙述者会用 leetpeak 说话,用看起来相似的数字和符号替换字母。例如,' L'变成'1';'E'变成'3';'T'变成'7'。(提示:看看String的替换function。有一个版本接受lambda作为第二个参数。)
这是他们告诉你看的 function ,特别是这个:
inline fun CharSequence.replace(
regex: Regex,
noinline transform: (MatchResult) -> CharSequence
): String
返回一个新字符串,该字符串通过将与给定正则表达式匹配的此字符序列的每个 substring 替换为给定 function 转换的结果而获得,该转换采用
MatchResult
并返回一个字符串以用作该匹配的替换。
因此,您提供的 lambda 是一个 function ,它接受一个MatchResult
并对其进行处理,并返回一个CharSequence
(可以是一个长String
)。 对于regex
进行的每个匹配, replace
function 调用 lambda。
你知道你应该做什么了吗? 您在这里有两个部分 - 识别要处理的输入字符串的部分的东西,以及获取这些匹配并将它们更改为其他东西的东西。 结果是进行了这些更改的原始字符串。 所以你需要想出一个可以一起工作的regex
和一个transform
。
没有人(可能)会告诉您答案,因为重点是自己解决问题,但是如果您对正则表达式之类的事情有任何疑问,人们会很乐意为您提供帮助,而且说到:这个网站非常有用(我只是自己用它来检查我知道自己在做什么): https://regex101.com/
这是@cactustictacs 指出的实现:
5 -> {
mood = "leet"
val regex: Regex = """[LET]""".toRegex()
modifier = { message ->
message.uppercase().replace(regex) { m ->
when (m.value) {
"L" -> "1"
"E" -> "3"
"T" -> "7"
else -> ""
}
}
}
}
这是另一种几乎相同的方法,但使用regex.replace()
进行了微小的更改
5 -> {
mood = "leet"
val regex: Regex = """[LET]""".toRegex()
modifier = { message ->
regex.replace(message.uppercase()){m ->
when (m.value) {
"L" -> "1"
"E" -> "3"
"T" -> "7"
else -> ""
}
}
}
}
您可以使用it
代替m
以使其更加简洁。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.