【问题标题】:how to count the number of words in Kotlin Android?如何计算 Kotlin Android 中的单词数?
【发布时间】:2019-03-30 00:08:13
【问题描述】:

我已尝试阅读此主题:Android - java - count words

但它对我不起作用。

假设我在 android 多行编辑文本中有这些词:


上午

非常非常

开心

现在


所以我想计算单词的数量,然后从该多行编辑文本中获取整数“7”。该怎么做?

这个我试过了,还是不行:

multilineEditText.addTextChangedListener(object: TextWatcher {

            override fun afterTextChanged(s: Editable?) {

            }

            override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {

            }

            override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {

                val words = s.toString().trim()
                numberOfInputWords = words.split("\\s+").first().length
                wordsCounterTextView.text = "$numberOfInputWords"


            }

        })

但是这段代码对我不起作用,因为它没有显示正确的数字。

来自线程Android - java - count words

据说可以用someString.split("\\s+").length

但我在使用.split("\\s+") 后无法访问.length。像这样

这就是我在代码中使用first() 的原因,即使它也不起作用。

【问题讨论】:

  • 这到底是怎么回事?您是否获得了意想不到的价值?它崩溃了吗?你的设备爆炸了吗?当你调试它时你发现了什么?它在哪个特定点出错?为了解决当前的问题,必须尝试什么?
  • @MikeM。对不起,我已经编辑了我的问题,现在我已经添加了原因
  • words.split("\\s+".toRegex()).size
  • @underoid 是的,这就是答案

标签: android kotlin android-edittext


【解决方案1】:

您遇到的唯一问题是您使用的是Kotlin's split 方法,它返回一个字符串列表,而Java's split 方法返回一个字符串数组。您应该访问 size 属性,因为这里 split 方法的返回是 List

  val words = s.toString().trim()
  numberOfInputWords = words.split("\\s+".toRegex()).size
  wordsCounterTextView.text = "$numberOfInputWords"

【讨论】:

    【解决方案2】:

    因此,您可以通过换行符和它们之间的空格数来计算单词。当然,连续的换行符和连续的空格算作一个。

    开头和结尾可能有空格/换行符。你用trim() 删除它。最后一个单词现在没有空格/换行符,所以你需要加 1。

    val string = "Hello\nWorld"
    val count = Regex("""(\s+|(\r\n|\r|\n))""").findAll(string.trim()).count() + 1
    println(count) // 2
    

    【讨论】:

      【解决方案3】:

      这将计算给定字符串中有多少个单词。

      fun wordCount(str: String): Int {
          val trimmedStr = str.trim()
          return if (trimmedStr.isEmpty()) {
              0
          } else {
              trimmedStr.split("\\s+".toRegex()).size
          }
      }
      

      它还修复了一些其他答案,这些答案在给定空字符串 ("") 时错误地返回 1。

      【讨论】:

        【解决方案4】:

        用空格替换所有\n 和拆分(“”); 获取拆分字符串的计数

        在java中:

        int count = multilineEditText.getText().toString().replace("\n", " ").split(" ").length;
        

        【讨论】:

          【解决方案5】:

          这是一个很酷的正则表达式来做你想做的事 (\s|\n)+

          someString.split("(\\s|\\n)+")
          

          这是一个测试 RegEx 的好应用:https://regexr.com/

          【讨论】:

            猜你喜欢
            • 2020-12-21
            • 1970-01-01
            • 2021-10-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-06-16
            相关资源
            最近更新 更多