我想获取文件的行,在该行中搜索特定文本,然后返回该行以及文件中具有相同特定文本的所有其他行。
到目前为止,我有这个:
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();
}
它必须是我需要时可以使用的功能。 我希望你们明白我想做什么,并提前感谢。
答案 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循环是一个无限循环
因为您没有在循环中更改line
或text
,如果条件匹配一次,它将继续匹配,直到您超过StringBuffer
的最大大小或内存不足。
所以这不仅仅是应该是一个if语句 - 需要。
答案 3 :(得分:0)
你在正确的轨道上,除了函数返回的字符串将是单行,因此你无法识别行数。
所以只需在每个追加
之后在最终字符串中添加新行字符答案 4 :(得分:0)
File
或转动
整个File
到String
。String
的{{1}} 方法替换replaceAll
中的所有Sting
使用 regex (这些天非常受欢迎)或更改为File
只是简单的String
s