Java中如何将SQLite存储的拼接字符串还原为ArrayList集合
还原ArrayList的实现方案
你当前的存储逻辑是用\n作为元素间的分隔符,从SQLite取出字符串后按分隔符拆分、过滤掉写入时多生成的末尾空值,即可还原出原始集合,完全适配现有存量数据的代码如下:
// 从SQLite游标中读取存储的字符串 String storedText = cursor.getString(cursor.getColumnIndexOrThrow("对应存储字段名")); ArrayList<String> resultList = new ArrayList<>(); // 判空处理,避免数据库存null时空指针 if (storedText != null && !storedText.isEmpty()) { // 传入-1是为了保留所有拆分出的空串,避免列表本身包含空元素时被默认split逻辑误删 String[] items = storedText.split("\n", -1); for (int i = 0; i < items.length; i++) { // 原有写入逻辑会在最后一个元素后也追加\n,拆分后最后一项是多余空串,直接跳过 if (i == items.length - 1 && items[i].isEmpty()) { break; } resultList.add(items[i]); } }
现有逻辑的缺陷与优化建议
- 你当前用换行做分隔符的方案有隐含风险:如果列表元素本身包含
\n字符,拆分时会把单个元素拆成多段,导致数据错乱。 - 如果可以调整存储逻辑,更稳妥的方式是用JSON序列化列表后存储,不需要自行处理分隔符转义问题,参考实现:
存储时写法:
import org.json.JSONArray; // 直接将列表转成JSON字符串存储 String storedStr = new JSONArray(itemslist).toString();读取时写法:
JSONArray jsonArray = new JSONArray(storedText); ArrayList<String> resultList = new ArrayList<>(); for (int i = 0; i < jsonArray.length(); i++) { resultList.add(jsonArray.getString(i)); }
内容的提问来源于stack exchange,提问作者nano tech
相关产品推荐
相关产品推荐

