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

字符串每4个逗号后插入换行及输出异常问题求助

解决字符串每4个逗号后插换行+数组输出乱码问题

问题根源

  • 奇怪输出[Ljava.lang.String@1c7172b:你多次用arrayOf(...).toString(),Kotlin数组默认的toString就是这种格式,完全没必要把单个字符串包成数组再转String,纯纯画蛇添足。
  • 换行插入逻辑崩了:
    1. 初始代码里commasCount在循环里声明,每次遍历字符都重置为0,根本没法累计逗号数量。
    2. 最新代码里改完字符串后长度变了,还按原索引循环,后面的字符位置全错;而且letters + 2的替换范围容易越界,因为逗号后的空格不一定存在。

修正代码

换个简单靠谱的思路:先把字符串按逗号拆成单个食材列表,每4个一组拼起来,组之间加换行。同时删掉多余的数组包装,直接用字符串。

database.collection("Pizze").whereEqualTo("section", sectionNumber).get()
    .addOnCompleteListener { result ->
        if (result.isSuccessful) {
            for (document in result.result) {
                val name = document.data["_name"].toString()
                val price = document.data["price"].toString()
                val section = document.data["section"].toString()

                // 处理食材字符串:去掉前后括号,拆成单个食材列表
                val rawIngredients = document.data["ingredients"].toString()
                    .removeSurrounding("[", "]") // 比两次replace更简洁
                val ingredientsList = rawIngredients.split(", ")

                // 每4个食材一组,组内用逗号连,组之间加", \n "
                val formattedIngredients = ingredientsList.chunked(4)
                    .joinToString(", \n ") { group -> group.joinToString(", ") }

                // 直接传字符串,别再包数组转String了
                data.add(PizzaViewModel(name, price, section, formattedIngredients))
                data.sortBy { it.name }
                val adapter = PizzaCustomAdapter(data, baseContext)
                recyclerView.adapter = adapter
            }
        }
    }

关键改进点

  • removeSurrounding专门用来去掉字符串首尾的指定字符,比两次replace更安全,不会误删中间的[或]。
  • split(", ")直接把食材拆成列表,不用手动数逗号,避免计数错误。
  • chunked(4)自动把列表分成每4个元素一组,再用joinToString拼接,轻松实现每4个后加换行。
  • 删掉所有arrayOf(...).toString(),直接用处理好的字符串,彻底解决数组输出乱码问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 03:33:31