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

Java使用正则split分割TXT类JSON字符串提取书籍属性方案求助

问题根因

你当前使用的"\\{\\}"正则匹配的是连续的{}字符,但你的TXT文本中两个图书对象的分隔符是}{(前一个对象的闭合花括号和后一个对象的起始花括号直接相连),完全匹配不到分隔符,所以分割结果不符合预期。
另外注意你提供的原始字符串存在语法错误:两个对象的描述字段末尾都漏写了单引号闭合标记,实际存储时需要修正,否则后续解析属性值会出错。

解决方案

1. 最优分割正则

推荐使用零宽断言正则 "(?<=})\\s*(?=\\{)",该正则匹配两个对象之间}和{中间的间隙,还兼容两个对象之间存在空格、换行的场景,分割后每个元素直接是带完整花括号的单个图书对象字符串,无需手动补全符号。

2. 修改后完整代码

import java.nio.charset.StandardCharsets;
import java.io.*;

public static boolean cargarlibros(){    
  File f = new File(FILENAME);
  // 指定UTF-8编码避免乱码
  try (BufferedReader buffr = new BufferedReader(new FileReader(f, StandardCharsets.UTF_8))) {
    String registro; 
    while((registro = buffr.readLine()) != null){
      // 用优化后的正则分割
      String[] datos = registro.split("(?<=})\\s*(?=\\{)");
      // 输出分割结果,后续可在此处添加JSON解析逻辑提取属性
      for (String libroStr : datos) {
        System.out.println(libroStr);
      }
    }
  } catch (IOException ex) {
    ex.printStackTrace();
    return false;
  }        
  return true;
}

3. 后续属性解析建议

分割得到单个对象字符串后,不需要自己写正则提取属性,可将字符串中的单引号替换为双引号、转义内容中的特殊字符后,直接用Gson、Jackson等JSON解析库反序列化为Java对象,代码更简洁,出错概率更低。

内容的提问来源于stack exchange,提问作者Jose Alexander Rios 3Palacios

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 16:09:00