我尝试阅读此线程: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+")
。像这样
这就是为什么我在代码中使用first()
的原因,即使它也不起作用。
答案 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"
答案 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。