2012-12-18 87 views
0

我想使用枚舉跳過某個請求參數。我使用下面的代碼,但它沒有給我想要的結果。任何人都可以告訴我如何跳過Enumeration中的元素或下面的代碼有什麼問題?跳過枚舉Java中的元素

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

回答

3

您每次循環呼叫nextElement()多次跳過多個元素。您只需撥打nextElement()一次。喜歡的東西...

for (Enumeration<String> e = request.getParameterNames(); e.hasMoreElements();) { 
    String value = e.nextElement(); 
    if(!"James".equalsIgnoreCase(value)) { 
     list.add(value); 
    } 
} 
1

問題是,你在你的if調用e.nextElement()兩次。這將消耗兩個元素。

你應該存儲在一個字符串的元素頭型,然後做比較: -

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

} 
1

因爲每次當你callnextElement()所以每次調用此方法將枚舉獲得下一個元素。如果在Enumeration中沒有對象,並且您將嘗試獲取它,您也可能會遇到異常。

NoSuchElementException - if no more elements exist. 

因此,只需更改您的代碼並只需撥打nextElement()一次。

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