一种从字符串中删除特定字符的方法? (科特琳)

时间:2019-01-16 11:22:00

标签: android string replace kotlin char

因此,我有一个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中输入的内容即可。

3 个答案:

答案 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