Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 与ArrayList字符串变量不工作的模式匹配_Java_Regex_Arraylist - Fatal编程技术网

Java 与ArrayList字符串变量不工作的模式匹配

Java 与ArrayList字符串变量不工作的模式匹配,java,regex,arraylist,Java,Regex,Arraylist,这是我的密码。我将日期存储在dates ArrayList中,它看起来像:[020406020407…],我正在搜索类似以下内容的文件中的模式: c001z020102 c002z020103 ... 代码: 所以我在代码中使用了类似matches的方法,我试图添加tmp变量来组合这个模式,这样我就可以从我的文件中获得选定的结果。如果我使用像[c]{1}[0-9]{3}[z]{1}[0-9]{2}[0-9]{2}[0-9]{2}这样的标准模式,它是有效的,但是每次我放置tmp时,我都会得到返回

这是我的密码。我将日期存储在dates ArrayList中,它看起来像:[020406020407…],我正在搜索类似以下内容的文件中的模式:

c001z020102
c002z020103
...
代码:

所以我在代码中使用了类似matches的方法,我试图添加tmp变量来组合这个模式,这样我就可以从我的文件中获得选定的结果。如果我使用像[c]{1}[0-9]{3}[z]{1}[0-9]{2}[0-9]{2}[0-9]{2}这样的标准模式,它是有效的,但是每次我放置tmp时,我都会得到返回的空arrayList:(我使用jodaTime来计算两个日期之间的天数,并将其存储在dates 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"));            
    }
}
public void countdates介于()之间
{
int days=days.daysBetween(dataPierwsza,dataOstatnia).getDays();

对于(int i=0;i consuddatesBevering)创建一个数组列表(dates.toString(“yyMMdd”),看起来像:[140606140607140608]。然后我想用这个模式在文件中搜索c001z,它是“[c]{1}[0-9]{3}[z]{1}”然后从tmp中获取所选日期,它基本上是迭代日期ArrayList。所以它应该是这样的,例如:c001z140606--->在文件中找到它并返回xmlCodes字符串ArrayList,但它只是返回空白ArrayList。

您的问题与
行中的模式无关。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);
}

您的问题与
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);
}

我真的不清楚你想做什么或你看到了什么-这会更容易帮助你解决问题。(特别是,我看不出
countdates之间的
与问题的其余部分有什么关系。)不要把信息放在评论中。总是更新你的问题而不是标题。我不太清楚你想做什么或你看到了什么-这会更容易帮助你解决问题。(特别是,我看不出
countdates之间的
与问题的其余部分有什么关系。)不要把信息放在评论里。总是更新你的问题