Java搜索字符串并获取以下行(直到空行)

时间:2017-08-11 12:21:52

标签: java search bufferedreader

我正在搜索的文件看起来像这样:

            keyword: 
            ====================
            category1:
            ----------
            St2
            Dpe
            Tmot:
            Bnw
            category2:
            ----------
            Rer
            Loo


            keyword2:
            ====================
            .
            .
            .

我想做什么:

  1. 搜索包含关键字的行(带“:”追加)
  2. 将以下所有行读入列表
  3. 当行为空时停止
  4. 在我的例子中,我用“关键字”调用我的搜索功能,它会添加从“====================”到“Loo”的所有内容到列表

    我已经有了一个肮脏的解决方案,但是如果搜索的关键字实际上不在文本文件中,那就太疯狂了:

    BufferedReader b = null;
    
    try {
        b = new BufferedReader(new FileReader(txtfile));
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    
    // search for the keyword and save the corresponding text block in a list
    while ((readLine = b.readLine()) != null) 
    {
        if(readLine.contains(keyword) && !(readLine.contains("_"+keyword)))
        {
            System.out.println("keyword is: " + readLine);
            while ((readLine = b.readLine()) != null) 
            {
                if(readLine.trim().isEmpty()) //stop at empyt line
                {
                    break;
                } else {
                    arr.add(readLine); // add element to list
                }
            }
        }
    }
    

    !(readLine.contains(“_”+关键字)语句存在,因为有时关键字也会显示为“Fun_keyword:”而我只想停在“keyword:”行

    问题:如果关键字不在文件中,如何重写此功能以使其仍能正常工作(不向列表中添加任何内容)?

1 个答案:

答案 0 :(得分:0)

我认为问题是当你希望它打破外部循环时,你的break语句会打破内部while循环。以下内容应该有效:

outerloop: while(true){ //your outer loop
    while(true){ //your inner loop
        if(keywordIsFound){
            break outerloop;
        }
    }
}

命名外部循环允许break函数专门打破该循环,而不是内部循环。