如何在Java中搜索多行并行文本?

时间:2012-03-01 08:02:00

标签: java regex pattern-matching

考虑在文本文件中包含以下标题的表

    Table name goes here
                                                                     Page 1
    This is column one                 This is   This
                         This is       column    is column
                         column two f   thre f    three f
                                                 and hal f

     Row1 in column 1    Row2InCol2     Row3       Row4InCol4


                                                                     Page 2


 This is column one                   This is     This
                        This is       column    is column
                        column two f   thre f    three f
                                                and hal f


 Grand Total: -       12               13        25     

我想搜索列“This is column three f and a hal f”,这样当我找到这个文本时,我能够获得此列开始的String索引位置(索引“This “)和此列结束的索引位置(单词”hal f“结束的索引,即”f“的索引)。请注意,所有列都包含单词“This”和字母“f”,并且我应该能够以类似方式搜索任何列的起始索引和结束索引,如上所述。

我希望能够这样做,因为我想实现一个解析器,它可以解析文本文件中的表,其中列标题和列数据的索引位置从一个页面到另一个页面不一致(其中换页符字符)表示页面结束)

我不是在寻找任何算法。我想知道Pattern和Matcher类(或任何其他API)是否支持多行文本搜索,如上所述?

2 个答案:

答案 0 :(得分:0)

一种过去对我有用的简单模式。

// split on two ore more spaces.
String[] fields = line.split("\\s{2,}");

这会将一个空格视为一个字段的一部分。

答案 1 :(得分:0)

因为您要搜索的文字是固定文字,所以正则表达式不是首选武器 - 只需在整个文本上使用String.indexOf(String),包括换行符,从第一个"This"到最后一个"f"

String target = "This\nThis is       column    is column\n                        column two f   thre f    three f\n                                                and hal f";

int start = input.indexOf(target);
int end = start + target.length();

要查找下一个匹配项,请使用上一个end作为fromIndex

使用String.indexOf(String str, int fromIndex)