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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 12:52:36