Android开发:从assets读取txt文件并随机显示单个单词
解决Android从Assets读取单词并随机显示的问题
你的核心问题是错误使用了toList()方法——这个方法会把字符串拆成单个字符的列表,而非按逗号分割成独立单词。下面是修正后的实现方案:
关键修改点
- 用
split()结合正则表达式分割字符串,兼容逗号后带空格/不带空格的情况 - 过滤空字符串,避免因文件格式问题产生无效元素
- 增加空列表判断,防止空指针异常
- 优化文件读取方式,用
BufferedReader更简洁可靠
修正后的完整代码
private fun randomWord() { try { assets.open("words.txt").bufferedReader().use { reader -> val myOutput = reader.readText() // 分割字符串:按逗号+任意数量空格分割,同时过滤空内容 val wordList = myOutput.trim().split(",\\s*".toRegex()) .filterNot { it.isBlank() } // 安全获取随机单词 binding.textView.text = if (wordList.isNotEmpty()) { wordList.random() } else { "无可用单词" // 空列表时的提示文本 } } } catch (e: IOException) { e.printStackTrace() binding.textView.text = "读取失败" // 读取错误时的提示 } }
代码说明
bufferedReader().use { ... }:自动关闭流,避免资源泄漏,比手动读取byte数组更简洁split(",\\s*".toRegex()):正则表达式\\s*匹配任意数量的空格,兼容Android,Kotlin,Java或Android, Kotlin, Java等格式filterNot { it.isBlank() }:过滤掉空字符串和纯空格的元素,避免列表中出现无效项- 空列表判断:防止文件为空或分割后无有效单词时调用
random()抛出异常
内容的提问来源于stack exchange,提问作者DiyorbekJDK
相关产品推荐
相关产品推荐

