2012-04-14 9 views
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(); 
} 

それは私がそれを必要とするとき、私は使用することができる機能である必要があります。 皆さん、私が何をしたいのかを理解していただき、ありがとうございます。

+2

あなたが投稿したコードに何が間違っているのか、私たちに教えてください。 –

+0

ねえ、スタックオーバーフローへようこそ。あなたは投稿の一番下にあなたの名前を署名する必要はありません - 彼らは自動的にあなたのユーザー名を一番下に表示します(詳細は[ここ](http://stackoverflow.com/help/behavior)を参照してください) – culix

答えて

2

を使用してStringに変更File のあらゆるStingを置き換えるために使用StringreplaceAll方法コードはかなり良いですし、正しい方法で問題に近づいています。 改行文字で各行を区切り、ファイルの読み込みを完了したときにbr.close();を呼び出すなど、ちょっとした工夫が必要です。私はまたあなたがなぜwhile(line.indexOf(text) > 0)を使用しているのかわかりません - それは本当にifステートメントでなければなりません。

見つかった行をどのように使いたいかによって、ArrayList<String>を使用し、一致した行をadd()(現在のStringBufferではなく)にする方が良いかもしれません。これは、メソッドから戻るときに個々の行を個別に使用する場合は、おそらくより良い解決策になります。

1

本当に質問はありませんが、私はあなたが検索結果を1つの長い行にする改行文字を追加していないことを確認します。あなたの内側のwhileif

sb.append('\n'); 

を追加し、変更します。だから、最終的なコードこのする必要があります:あなたは行数を特定することはできませんので

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

あなたの正しい軌道上の関数によって返される文字列を除いては、単一の行になります。

ごとにFileから行ずつ読むことやStringに 全体Fileをオンにする

0
  • 使用ApacheのIOUtilsを追加した後に、これだけの最終文字列に改行文字を追加します。
  • それはあなたのように見えます(これらの日は非常に人気があります)正規表現または 単なるString
1

明示的に言うと、その内側のwhileループは無限ループです。
ループ内でlineまたはtextを変更していないため、条件が一度一致した場合は、最大サイズがStringBufferを超えたり、メモリ不足になるまで引き続き一致します。
ループがifステートメントになる必要があります - である必要があります。

関連する問題