0

テキストファイルを使用して値を読み取り、このファイルをバッファリングされたリーダーにロードしています。その後、ファイルを1行ずつ読み取り、いずれかの行にキーワードの1つが含まれているかどうかを確認しています(既に文字列のリストに含まれています)。

ただし、その行に私が探しているキーワードが含まれていても、それは検出されず、ミスが発生します。コードは次のとおりです。

    for(int i=0;i<sortedKeywordList.size();i++)
        {
        String tempString=sortedKeywordList.get(i);
        while(US.readLine()!=null)
        {   
            String str=US.readLine();
            //System.out.println(str);
            if(str.contains(tempString)){
                System.out.println("Contains: "+tempString);
            }               
            else{
                System.out.println("Miss");
            }
        }
    }
4

5 に答える 5

2

キーワードごとに、readLine()を使用してバッファーを反復処理しています。US.readLine()したがって、最初のキーワードの後、バッファの読み取りが使い果たされ、 nullが返されるため、次のキーワードテストは実行されません。リーダーを再初期化するわけではありません。

readLine()では、(構造を使用して)ファイルを1回繰り返してから、行ごとにキーワードを繰り返してみませんか?

編集:ハンターが(上記で)指摘したように、ループごとに2回readLine()も呼び出しています。ループテストに1回、各行でキーワードを確認するために1回。まず、ファイルを正しく読み取っていることを確認します(読み取るときに各行を印刷するだけです)。

于 2012-04-19T17:00:20.383 に答える
2

US.readLine()を2回呼び出しています!

代わりに試してください:

String tempString;
String str;

for(...)
{
    tempString = sortedKeywordList.get(i);
    while((str = US.readLine()) != null)
    {
        ...
    }
}
于 2012-04-19T17:02:18.353 に答える
1

US.readLine()whileループの入り口で一度呼び出し、もう一度内側で呼び出しています。これにより、入力が次の行に移動します。また、とと文字列を比較し.equals()、を使用して部分文字列を確認します.contains()

于 2012-04-19T17:01:05.093 に答える
1

私は2つの大きな問題を見ています。

  1. ループが逆になっています。

    あなたがそれを書いた方法では、keyword1を調べてから、入力全体を調べて、keyword1をチェックします。これで、入力がなくなり、keyword2に移動しますが、チェックする入力が残っていないため、残りのキーワードをすばやく繰り返して終了します。

    入力をループして、キーワードではなく各キーワードをチェックし、入力の各行をチェックします。

    while(input){
    
        for each keyword {
        ...
    
  2. 反復ごとに2回呼び出し.readLine()ており、事実上1行おきにスキップしています。

    ループの外側に最初の行を格納し、ループ条件でnullをチェックしてから、ループが終了する前にreadLinejuuustを呼び出してみてください。

于 2012-04-19T17:06:25.570 に答える
0

問題のデータセットが役立ちます。それがなければ、いくつかの考え-

  1. ソートされたキーワードの大文字と小文字がテキストファイルの大文字と小文字と一致することを確認します。それらが一致せず、大文字と小文字を区別しない照合をサポートする必要がある場合は、両方の文字列を同じ大文字と小文字に変換し(たとえば、toUpperCase()を使用)、contains()呼び出しを使用します。

  2. ソートされたキーワードの末尾に余分な文字(改行など)が追加されていないことを確認します。

于 2012-04-19T17:04:59.087 に答える