0

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

到目前为止我有这个:

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();
}

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

4

5 回答 5

2

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

根据您在找到这些行后想要如何使用它们,您可能会发现使用 aArrayList<String>并且仅add()使用匹配的行(而不是当前的StringBuffer)会更好。如果从方法返回时要单独使用每一行,这可能是一个更好的解决方案。

于 2012-04-14T11:50:42.703 回答
1

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

sb.append('\n');

并将您的内部更改whileif. 所以最终的代码应该是这样的:

    while((line = br.readLine()) != null)
    {
        if (line.indexOf(text) > 0)
        {
            sb.append(line);
            sb.append('\n');
        }
    }
于 2012-04-14T11:43:09.727 回答
1

明确地说,那个内部的while循环是一个无限循环。
因为你没有改变line或者text在循环内,如果条件匹配了一次,就会一直匹配到你超过max sizeStringBuffer或者内存用完为止。
所以不仅仅是那个循环应该是一个 if 语句——它必须是。

于 2013-08-11T16:59:20.560 回答
0

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

所以只需在每次追加后在最终字符串中添加换行符

于 2012-04-14T11:47:02.707 回答
0
  • 使用 Apache 的 IOUtils 从 a 逐行读取File或将整个File转换为String.
  • 使用String'sreplaceAll 方法替换任何 更改为Sting使用正则表达式(这几天非常流行)或只是简单的 sFileStringString
于 2012-04-14T11:47:52.307 回答