节名称/内容文本需要Java文本解析帮助

节名称/内容文本需要Java文本解析帮助,java,regex,parsing,Java,Regex,Parsing,我有以下格式的文本: 章节名称1: 这篇课文进入了第二部分 第一节 章节名称2: 本文 进入第二部分 等等, 其中节名为任意短语,节内容将包含除节名以外的自由文本。我需要将此文本拆分为类型的对象对(节名称,节文本) 有没有一种有效的正则表达式或其他推荐的方法 谢谢。 -Raj您需要一个结构或一个固定的、可识别的分隔符来决定一行是包含节名还是节体 如果您有这样一条规则:以冒号结尾的文本行是节名,那么您应该逐行阅读文档,查找行中的最后一个字符,并将行(1)视为节头(如果其最后一个字符是冒号),或者(

我有以下格式的文本:

章节名称1:

这篇课文进入了第二部分 第一节

章节名称2:

本文 进入第二部分

等等,

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

有没有一种有效的正则表达式或其他推荐的方法

谢谢。
-Raj

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


如果您有这样一条规则:以冒号结尾的文本行是节名,那么您应该逐行阅读文档,查找行中的最后一个字符,并将行(1)视为节头(如果其最后一个字符是冒号),或者(2)视为节体的一部分(否则)。

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

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;
  }
}