【问题标题】:A way to remove specific characters from a string? (kotlin)一种从字符串中删除特定字符的方法? (科特林)
【发布时间】:2019-06-10 11:25:16
【问题描述】:

所以我有一个文本字段,您应该在其中输入您的“编码”文本,并通过使用 .replace 删除某些字符将其翻译回非编码语言。但我无法让它工作。

有一种儿童“代码语言”,您可以在其中使用一个单词,例如 cat,然后为每个辅音添加一个“o”,然后再次添加辅音。所以“b”就是“bob”。对于元音,它们保持原样。猫是 cocatot。

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 中输入的内容...

【问题讨论】:

    标签: android string replace kotlin char


    【解决方案1】:

    使用forEach 循环遍历input 的字符并替换:

    konsonanter.forEach { input = input.replace("${it}o${it}", "${it}", false) }
    textView.text = input
    

    【讨论】:

    • 我不知道 OP 是否需要它,但这不适用于“Bob”(开头为大写 B)。我在回答中提到了这一点。
    • @WilliMentzel 如果 input"Bob" 那么结果是 "Bob" 也是因为 false 对于 ignoreCase争论。为什么你说这对“鲍勃”不起作用?
    • 不应该把“Bob”改成“b”吗?可能我理解错了
    • 不,“bob”应该变成“b”,“BoB”应该变成“B”。
    • 也许你比我更了解这款游戏,我认为从问题中看不清楚...谁知道呢。无论如何都是好答案。
    【解决方案2】:

    问题是您在每个循环中都在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
    

    【讨论】:

      【解决方案3】:

      如果您将replace 函数与正则表达式和转换函数一起用作参数,您可以创建一个非常简洁的完全自包含的扩展函数:

      fun String.translateBack() = with(Regex("([bcdfghjklmnpqrstvwxz])o\\1", RegexOption.IGNORE_CASE)) {
          replace(this) { "${it.value.first()}" }
      }
      

      说明:

      Regex 将匹配围绕“o”的所有相同辅音(无论大小写)。 为了确保“o”前后的辅音相同,使用了第一组的backreference

      因此,这也适用于“coCatot”之类的情况。

      用法:

      println("bob".translateBack()) // b
      println("cocatot".translateBack()) // cat
      println("coCatot".translateBack()) // cat
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-04-08
        • 1970-01-01
        • 2015-10-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多