You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kotlin Android中统计多行EditText的单词数?

解决Android多行EditText单词统计问题

我来帮你搞定这个单词统计的问题!先拆解下你代码里的几个关键问题:

问题根源分析

  1. 核心逻辑错误:你写的words.split("\\s+").first().length是在取第一个单词的字符长度,而不是所有单词的总数,这肯定得不到你想要的7呀!
  2. Kotlin集合长度的误区:你说调用split("\\s+")后没法访问.length,是因为Kotlin里split()返回的是List<String>,集合的长度属性是.size,而Java数组才用.length——这是个很容易搞混的小细节!

修正后的完整代码

直接调整onTextChanged里的逻辑,同时处理空输入的边缘情况(避免崩溃或错误统计):

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) {
        // 处理空输入,避免null异常
        val inputText = s?.toString()?.trim() ?: ""
        numberOfInputWords = if (inputText.isEmpty()) {
            0
        } else {
            // 转成正则表达式,匹配一个或多个空白字符(含换行,适配多行EditText)
            inputText.split("\\s+".toRegex()).size
        }
        wordsCounterTextView.text = "$numberOfInputWords"
    }
})

关键细节说明

  • ?.toString()?.trim() ?: "":安全处理输入为空的情况,防止s为null导致崩溃,同时去掉文本首尾的空白字符。
  • split("\\s+".toRegex()):必须转成正则表达式,才能匹配连续的空格、换行符等空白字符,这样多行EditText里的换行也不会影响统计。
  • 空文本判断:如果输入全是空白字符,trim后会变成空字符串,这时候直接返回0,避免把空字符串错误统计成1个单词。

用你的测试文本I am very very happy right now验证,这段代码会正确输出7,完美符合你的需求!

内容的提问来源于stack exchange,提问作者Agung

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 06:34:17