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

必要なときに使える機能でなければなりません。私のやりたいことを理解していただければ幸いです。よろしくお願いします。

4

5 に答える 5

2

あなたのコードはかなり良いようで、正しい方法で問題に取り組んでいます。各行を改行文字で区切り、ファイルの読み取りが終了したら\n呼び出すなど、整理するためにいくつかのことが必要です。br.close();なぜあなたがaを使用しているのwhile(line.indexOf(text) > 0)かもわかりません-それは本当にifステートメントでなければなりません。

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

于 2012-04-14T11:50:42.703 に答える
1

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

于 2013-08-11T16:59:20.560 に答える
1

実際には質問はありませんが、検索結果が 1 行に長くなる改行文字を追加していないことがわかります。追加

sb.append('\n');

そしてあなたのインナーwhileをに変えてくださいif。したがって、最終的なコードは次のようになります。

    while((line = br.readLine()) != null)
    {
        if (line.indexOf(text) > 0)
        {
            sb.append(line);
            sb.append('\n');
        }
    }
于 2012-04-14T11:43:09.727 に答える
0

関数によって返される文字列が1行になることを除いて、正しい軌道に乗っているため、行数を特定できません。

したがって、追加するたびに最終文字列に改行文字を追加するだけです

于 2012-04-14T11:47:02.707 に答える
0
  • Apache の IOUtils を使用して、 から 1 行ずつ読み取るFileか、全体Fileをに変換しStringます。
  • StringreplaceAll メソッドを使用Stingして、File 変更されたものをregexStringを使用する(最近は非常に人気があります) または単純なsに置き換えますString
于 2012-04-14T11:47:52.307 に答える