0

Enumeration を使用して特定のリクエスト パラメータをスキップしたい。以下のコードを使用しましたが、望ましい結果が得られませんでした。列挙型から要素をスキップする方法や、以下のコードの問題点を教えてください。

 for (Enumeration<String> e = request.getParameterNames(); e.hasMoreElements();) {
        if("James".equalsIgnoreCase(e.nextElement().toString())) {
            e.nextElement();
            continue;
        } else {
            list.add(e.nextElement().toString());
        }
    }
4

3 に答える 3

3

nextElement()複数の要素をスキップして、ループごとに複数回呼び出しています。電話する必要があるのはnextElement()1 回だけです。何かのようなもの...

for (Enumeration<String> e = request.getParameterNames(); e.hasMoreElements();) {
    String value = e.nextElement();
    if(!"James".equalsIgnoreCase(value)) {
        list.add(value);
    }
}
于 2012-12-18T08:42:57.320 に答える
1

問題は、でe.nextElement()2 回呼び出していることですif。それは2つの要素を消費します。

最初に要素を String 型に格納してから、比較を行う必要があります。

for (Enumeration<String> e = request.getParameterNames(); e.hasMoreElements();) {
    String elem = e.nextElement();
    if("James".equalsIgnoreCase(elem)) {
        continue;
    } else {
        list.add(elem);
    }
}

toString()後は必要ありませんe.nextElement()。ジェネリック型を使用しているため、それはあなたStringだけを提供します。


補足として、while反復回数が固定されていないため、この場合はループを使用することをお勧めします。以下は、あなたの同等のwhileループバージョンですfor-loop: -

{
    Enumeration<String> e = request.getParameterNames();

    while (e.hasMoreElements()) {
        String elem = e.nextElement();
        if(!"James".equalsIgnoreCase(elem)) {
            list.add(elem);
        } 
    }

}
于 2012-12-18T08:43:38.217 に答える
1

呼び出す たびに、nextElement()このメソッドを呼び出すたびに列挙から次の要素が取得されるためです。列挙にオブジェクトがなく、それを取得しようとすると、例外が発生することもあります。

NoSuchElementException - if no more elements exist.

nextElement()したがって、コードを変更して1 回だけ呼び出すだけです。

for (Enumeration<String> e = request.getParameterNames(); e.hasMoreElements();) {
    String str= e.nextElement().toString();
    if("James".equalsIgnoreCase(str)) {
        continue;
    } else {
        list.add(str);
    }
}
于 2012-12-18T08:47:33.360 に答える