匹配模式与ArrayList字符串变量不起作用

时间:2016-03-19 14:12:42

标签: java regex arraylist

这是我的代码。我将日期存储在日期ArrayList中,它看起来像是:[020406,020407 ...]我正在文件中搜索模式,如下所示:

c001z020102
c002z020103
...

代码:

private void printReaderContent(BufferedReader reader) throws IOException {
    String line = null;

    for(String tmp : dates) {
        while ((line = reader.readLine()) != null) {
            if (line.matches("[c]{1}[0-9]{3}[z]{1}" + tmp)) {
                xmlCodes.add(line);
            } else {
            }
        }
    }
    System.out.println(xmlCodes);
}

所以我在我的代码中有匹配方法,我试图添加tmp变量来组合这个模式,这样我就可以从我的文件中获取选定的结果。如果我使用标准模式,如[c] {1} [0-9] {3} [z] {1} [0-9] {2} [0-9] {2} [0-9] {2}它工作,但每次我把tmp改为空白arrayList返回:(我使用jodaTime计算之间的天数,并将其存储在日期中ArrayList:

public void countDatesBetween()
{
    int days = Days.daysBetween(dataPierwsza, dataOstatnia).getDays();
    for (int i = 0; i <= days; i++) 
    {
        DateTime d = dataPierwsza.withFieldAdded(DurationFieldType.days(), i);
        dates.add(d.toString("yyMMdd"));            
    }
}

我有一个包含多行特定模式的文件,例如:c001z040206。用户输入2个日期,如2014-06-06和2014-06-08 ---&gt; coundDatesBetween创建一个arrayList(dates.toString(&#34; yyMMdd&#34;),如下所示:[140606,140607,140608]。然后我想用这个模式搜索文件c001z,这是&#34; [ c] {1} [0-9] {3} [z] {1}&#34;并从tmp中获取选定日期,这基本上是迭代日期ArrayList。所以它应该是那样的例如:c001z140606 ---&gt;在文件中找到并返回xmlCodes String ArrayList,但它只是返回空白的arraylist。

1 个答案:

答案 0 :(得分:0)

您的问题与line.matches()语句中的模式无关。你需要交换内/外循环,否则你只会尝试匹配第一个日期。

private void printReaderContent(BufferedReader reader) throws IOException {
    String line = null;

    while ((line = reader.readLine()) != null) {
        for (String tmp : dates) {
            if (line.matches("[c]{1}[0-9]{3}[z]{1}" + tmp)) {
                xmlCodes.add(line);
                break;
            }
        }
    }
    System.out.println(xmlCodes);
}