如何计算Kotlin Android中的单词数?

时间:2019-03-30 00:08:13

标签: android kotlin android-edittext

我尝试阅读此线程: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

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

enter image description here

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

5 个答案:

答案 0 :(得分:0)

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

在Java中:

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

答案 1 :(得分:0)

这是一个很酷的RegEx,可以执行您想要的(\ s | \ n)+

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

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

答案 2 :(得分:0)

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

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

Example for kotlin's split method

答案 3 :(得分:0)

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

开头和结尾可能会有空格/换行符。您使用trim()将其删除。最后一个单词现在没有空格/换行符,因此您需要添加1。

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

答案 4 :(得分:0)

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

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

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