代码之家  ›  专栏  ›  技术社区  ›  Raj

用段落名称/内容文本帮助Java文本解析

  •  1
  • Raj  · 技术社区  · 14 年前

    我有以下格式的文本:

    章节名称1:

    此文本将进入 第一节

    章节名称2:

    本文 进入第二部分

    等,

    节名称是任意短语,节内容将包含除节名称以外的自由文本。我需要将此文本拆分为类型的对象对( 节名 , 段落文本 )

    是否有有效的regex或其他建议的方法来执行此操作?

    谢谢。 拉吉

    2 回复  |  直到 14 年前
        1
  •  0
  •   Mohamed Mansour    14 年前

    这取决于你的文件的结构。例如,每个部分是否都有空行?如果是这样,那么只需逐行扫描并以这种方式构造对象就很容易了。

    List<Section> sections = new ArrayList<Section>();
    String temp = null;
    String line = null;
    int lineNumber = 0;
    
    while ((line = br.readLine()) != null) {
      lineNumber++;
      if (lineNumber % 2 == 0) {
        // Section Text
        sections.add(new Section(temp, line);
      }
      else {
        // Section Name
        temp = line;
      }
    }
    

    那么您的部分可能是:

    public class Section {
      private final String name;
      private final String text;
      public Section(String name, String text) {
        this.name = name;
        this.text = text;
      }
    }
    
        2
  •  0
  •   Andreas Dolk    14 年前

    您需要一个结构或一个固定的、可识别的分隔符来决定一行是包含一个节名还是一个节体。

    如果你有一条规则说: 以冒号结尾的文本行是节名 ,然后您应该一行一行地阅读文档,查找一行中的最后一个字符,如果行(1)的最后一个字符是冒号,则将其视为节头,否则将行(2)视为节正文的一部分。