如何在Kotlin Android中统计多行EditText的单词数?
解决Android多行EditText单词统计问题
我来帮你搞定这个单词统计的问题!先拆解下你代码里的几个关键问题:
问题根源分析
- 核心逻辑错误:你写的
words.split("\\s+").first().length是在取第一个单词的字符长度,而不是所有单词的总数,这肯定得不到你想要的7呀! - 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
相关产品推荐
相关产品推荐

