-5

文字列が比較的大きな (たとえば 8000 項目) リストに存在するかどうかを確認しようとしています。

それが私がしたことです:

    for ( int i = 0; i < listOfStrings.size(); i++){
        String trim = listOfStrings.get(i).getString().trim();
        if (trim.equals(testString)){
            check = true;
            break;
        } else {
            check = false;
        }
    }

しかし、文字列がリストにあると確信していますが、偽の戻り値が返されます。これは大きなリストに対する間違ったアプローチですか?

編集:

コンテキストなしで切り取られたコードで申し訳ありません。はい、壊れます。不足している。

4

6 に答える 6

7

一致して に設定checkされている可能性がtrueありますが、ループを終了していません。その後、次のループは一致せず、 に設定checkされfalseます。breakステートメントでループを見つけたら、ループを終了します。

于 2013-03-13T16:48:38.873 に答える
4

マッチを見つけたら戻る必要があります。そうしないと、次の不一致で check = false がリセットされます。

于 2013-03-13T16:48:32.097 に答える
3

そのループを書いた方法では、文字列がリストの最後の文字列でない限り、check は false になります。true を返すか、そこに休憩を入れる必要があります。

于 2013-03-13T16:48:41.653 に答える
2

リストの最後の文字列が一致しない限り、一致しない場合はcheckの値がfalseに設定されている(true値を置き換える)ため、これは常にfalseを返します。break一致する値を見つけた後に使用します。

また、なぜgetString()呼び出しが必要なのですか?リストが文字列でいっぱいの場合、それは必要ではないでしょうか?

私が信じているのは適切な修正です(比較する前に各文字列をトリミングする正当な理由があると仮定します):

for ( int i = 0; i < listOfStrings.size(); i++){
    String trim = listOfStrings.get(i).trim();
    if (trim.equals(testString)){
        check = true;
        break;
    } else {
        check = false;
    }
}
于 2013-03-13T16:48:51.307 に答える
1

文字列を見つけたときにforループを中断しなかったため、誤った戻り値が返されると思います。

于 2013-03-13T16:50:35.387 に答える
1

ハッシュ検索を使用するStringとして sを保存することをお勧めします。これはより効率的です。HashSet

于 2013-03-13T16:51:39.870 に答える