我需要在由几行字符串组成的文本文件中的特定行上找到一个字符串。但是,我找到文本或文件末尾的循环是永久搜索。我知道字符串在文件中。这是我用来查找文本的代码 - 但要注意,如果你在系统上尝试它,即使是一个简单的文本文件,它也会进入一个永恒的循环。
我非常感谢任何提示或指示来解释我在这里做错了什么。
private static void locateText(String locateText, BufferedReader locateBffer) {
boolean unfound = true;
try
{
String line = locateBffer.readLine();
while (unfound)
{
line = locateBffer.readLine();
if ((line.equals(locateText)) || (line == null))
{
unfound = false;
}
}
}
catch(IOException e)
{
System.out.println("I/O error in locateText");
}
}
更新:发现问题 - 它没有在文件的第一行找到匹配项。
答案 0 :(得分:5)
我认为GaryF是对的(您的文字位于文件的第一行)。
我想在你的代码中指出一行:
if ((line.equals(locateText)) || (line == null)) {
你必须写下这个:
if ((line == null) || (line.equals(locateText)) {
实际上,如果line为null,则代码将抛出NullPointerException。这就是为什么你必须先测试line
是否为null
。
除此之外,我建议您查看commons.lang library of Apache,因为它提供了非常有用的文本类(如StringUtils)......
答案 1 :(得分:4)
您的文字是否可以在第一行找到?你在循环之外然后在里面执行readLine操作,所以第一行基本上被忽略了。
答案 2 :(得分:0)
将此循环更改为类似的内容,它将读取所有行:
while((line = locateBffer.readLine()) != null){
if(line.equals(locateText)){
break;
}
}
也许这会有所帮助。