【问题标题】:How to return a line when searching for text in that line在该行中搜索文本时如何返回该行
【发布时间】:2012-04-14 11:39:48
【问题描述】:

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

到目前为止我有这个:

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

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

【问题讨论】:

  • 您没有告诉我们您发布的代码有什么问题,只是您希望我们为您做的事情。
  • 嗨,欢迎来到 Stack Overflow。仅供参考,您无需在帖子底部签名 - 它们会自动在底部显示您的用户名(有关详细信息,请参阅 here

标签: java file search text line


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    sb.append('\n');
    

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:
          • 使用 Apache 的 IOUtils 从 File 中逐行读取或将 整个 FileString
          • 使用StringreplaceAll方法替换File中的任何Sting 使用 regex 更改为 String(这几天非常流行)或 简单的Strings

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-10-07
            • 1970-01-01
            • 1970-01-01
            • 2023-01-18
            • 1970-01-01
            • 1970-01-01
            • 2015-01-29
            • 1970-01-01
            相关资源
            最近更新 更多