2009-08-28 10 views
2

文字列のいくつかの行で構成されるテキストファイル内の特定の行に文字列を配置する必要があります。しかし、テキストやファイルの終わりを見つけるための私のループは、永遠に検索しています。私は文字列がファイル内にあることを知っています。ここでは、テキストを見つけるために使用しているコードですが、シンプルなテキストファイルであってもシステム上で試してみると、永遠のループに入ります。Java初心者:ファイル内の特定のテキストを検索する無限ループ

私がここで間違っていることを説明するためのヒントやポインターをありがとう。

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

更新:問題を発見 - それは、ファイルの最初の行に一致するものを見つけていませんでした。

+1

注こと...それは(のStringUtilsのような)テキストのために非常に便利なクラスを提供してあなたは、commons.lang library of Apacheで顔をしていることを示唆しています、例えばboolean found = false; while(!found) –

+4

@elwynn:回答が得られる質問を削除する必要はありません。彼らが同じ問題を抱えていて、SOを検索することでこれを見つけたら、他の人々が将来的に助けられるかもしれません。 –

+0

@elwynn Garyの答えを受け入れてください! – Epaga

答えて

4

テキストは最初の行にありますか?あなたはあなたのループの外でreadLine操作を行い、その後、最初の行は基本的に無視されます。

+0

良い、貴重な答えですが、それはどのように無限ループを引き起こしますか? – RichieHindle

+0

ありがとうございました。はい、ファイルの最初の行にテキストが含まれています。私は変更String line = locateBffer.readLine();読み込むにはString line = "";それが問題を解決しました。 – elwynn

0

変更そのようなことに、このループ、それがすべての行を読み込みます:

while((line = locateBffer.readLine()) != null){ 
if(line.equals(locateText)){ 
    break; 
} 
} 

は多分それが役立ちます。

5

私はGaryFが正しいと思います(あなたのテキストはファイルの最初の行にあります)。

私はあなたのコード内の行を指すように望んでいた:あなたの代わりにこの書き込みをしなければならない

if ((line.equals(locateText)) || (line == null)) { 

:確かに

if ((line == null) || (line.equals(locateText)) { 

をラインがnullの場合、あなたのコードは、NullPointerExceptionがスローされます。そのため、前にlinenullであるかどうかをテストする必要があります。それに加えて

、私はそれが正の条件の後に名前のブールに通常より読みやすいです

+0

チップをありがとうございます。私はそれに応じてコードを変更します! – elwynn

関連する問題