因此,我有一个textField,您应在其中输入“编码”文本,并使用.replace删除某些字符,将其翻译回非编码语言。但是我无法正常工作。
有一个孩子的“代码语言”,您可以像猫一样输入一个单词,然后为每个辅音添加一个“ o”,然后再添加一个辅音。因此,“ b”将是“ bob”。有了元音,它们就保持原样。猫会混在一起的。
fun translateBack(view : View) {
val konsonanter = "bcdfghjklmnpqrstvwxzBCDFGHJKLMNPQRSTVWXZ"
var input = editText.text.toString()
var emptyString = ""
for(i in konsonanter) {
val find_text = i + "o" + i
var conso = i.toString()
textView.text = input.replace(find_text, conso, false)
}
}
希望它为每个辅音除去以下两个字母(如果可能)。因此,如果我输入“ cocowow”,我应该离开“ cow”。现在,我只需取回在textField中输入的内容即可。
答案 0 :(得分:2)
在forEach
的字符中使用input
循环并替换:
konsonanter.forEach { input = input.replace("${it}o${it}", "${it}", false) }
textView.text = input
答案 1 :(得分:1)
问题是您在每个循环中都在textView
中设置文本,而从不更新input
。因此,您基本上只看到在循环结束时使用replace
和"ZoZ"
参数进行的"Z"
调用的结果,而input
仍然是原始的字符串。
相反,您可以继续更新input
,然后在完成后设置文本:
val konsonanter = "bcdfghjklmnpqrstvwxzBCDFGHJKLMNPQRSTVWXZ"
var input = editText.text.toString()
var emptyString = ""
for (i in konsonanter) {
val find_text = i + "o" + i
val conso = i.toString()
input = input.replace(find_text, conso, false)
}
textView.text = input
答案 2 :(得分:0)
如果您将replace函数与正则表达式和转换函数一起用作参数,则可以创建一个非常简洁,完全自包含的扩展函数:
fun String.translateBack() = with(Regex("([bcdfghjklmnpqrstvwxz])o\\1", RegexOption.IGNORE_CASE)) {
replace(this) { "${it.value.first()}" }
}
说明:
正则表达式将匹配所有相同的辅音(无论如何),在“ o”周围。 为了确保“ o”之前和之后的辅音相同,对第一组使用了backreference。
因此,这也适用于“ coCatot”之类的情况。
用法:
println("bob".translateBack()) // b
println("cocatot".translateBack()) // cat
println("coCatot".translateBack()) // cat