如何在该行中搜索文本时返回一行

时间:2012-04-14 11:39:48

标签: java file search text line

我想获取文件的行,在该行中搜索特定文本,然后返回该行以及文件中具有相同特定文本的所有其他行。

到目前为止,我有这个:

public String searchText(String text, String file)
{
    StringBuffer sb = new StringBuffer();

    try {
        BufferedReader br = new BufferedReader(new FileReader(file));
        String line = null;

        while((line = br.readLine()) != null)
        {
            while(line.indexOf(text) > 0)
            {
                sb.append(line);
            }
        }

        return sb.toString();
    } catch (Exception e) {
        e.printStackTrace();        
    }
    return sb.toString();
}

它必须是我需要时可以使用的功能。 我希望你们明白我想做什么,并提前感谢。

5 个答案:

答案 0 :(得分:2)

看起来您的代码非常好,而且您正在以正确的方式解决问题。您只需要一些东西来整理它,例如用\n换行符分隔每一行,并在读完文件后调用br.close();。我也不确定你为什么使用while(line.indexOf(text) > 0) - 它应该是if声明。

根据您在找到这些线条时的使用方式,您可能会发现使用ArrayList<String>并使用add()匹配的线条(而不是当前的{ {1}})。如果您在从方法返回时单独使用每一行,这可能是一个更好的解决方案。

答案 1 :(得分:1)

没有真正的问题,但我看到的是你没有附加换行符,这会导致搜索结果在一条长行上。添加

sb.append('\n');

将内部while更改为if。所以最终的代码应该是这样的:

    while((line = br.readLine()) != null)
    {
        if (line.indexOf(text) > 0)
        {
            sb.append(line);
            sb.append('\n');
        }
    }

答案 2 :(得分:1)

明确地说,内部while循环是一个无限循环 因为您没有在循环中更改linetext,如果条件匹配一次,它将继续匹配,直到您超过StringBuffer的最大大小或内存不足。
所以这不仅仅是应该是一个if语句 - 需要

答案 3 :(得分:0)

你在正确的轨道上,除了函数返回的字符串将是单行,因此你无法识别行数。

所以只需在每个追加

之后在最终字符串中添加新行字符

答案 4 :(得分:0)

  • 使用Apache的IOUtils逐行读取File或转动 整个FileString
  • 使用String的{​​{1}} 方法替换replaceAll中的所有Sting 使用 regex (这些天非常受欢迎)或更改为File 只是简单的String s