字符串每4个逗号后插入换行及输出异常问题求助
解决字符串每4个逗号后插换行+数组输出乱码问题
问题根源
- 奇怪输出
[Ljava.lang.String@1c7172b:你多次用arrayOf(...).toString(),Kotlin数组默认的toString就是这种格式,完全没必要把单个字符串包成数组再转String,纯纯画蛇添足。 - 换行插入逻辑崩了:
- 初始代码里
commasCount在循环里声明,每次遍历字符都重置为0,根本没法累计逗号数量。 - 最新代码里改完字符串后长度变了,还按原索引循环,后面的字符位置全错;而且
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
相关产品推荐
相关产品推荐

