2013-09-27 3 views
0

У меня есть документ, который я просматриваю для определенных экземпляров, однако эти экземпляры указаны пользователем и их несколько. Помимо цикла for внутри цикла for, который ищет Nodelist в отношении массива, есть ли способ, которым я не хватает, что бы не повредить систему? Или проще?Поиск NodeList с помощью массива

До сих пор, мой код выглядит следующим образом абстрактно:

public void sortDoc(Document doc){ 
    NodeList list = doc.getFirstChild().getChildNodes(); 
    ArrayList<String> typeList = otherSorter.getTypes(); 
    for(int i=0; i<list.getLength(); i++){ 
     for(int j=0; j<typeList.size(); j++){ 
      if(list.item(i).getNodeName()==typeList.get(j)){ 
       doTheThing(); 
      } 
     } 
    } 
} 

Спасибо за любую помощь вы можете дать.

ответ

3

Вы можете использовать List#contains(Object) для проверки имени узла в ArrayList.

for(int i=0; i<list.getLength(); i++){ 
    if(typeList.contains(list.item(i).getNodeName())){ 
     // Do Something. 
    } 
} 

Кроме того,

if(list.item(i).getNodeName()==typeList.get(j)) { 

Никогда Ever использовать выше == оператор для сравнения строк значения.

Всегда используйте метод equals() для сравнения значений строк, как это:

if(list.item(i).getNodeName().equals(typeList.get(j))) { 
+0

Huzzah, очень простой и аккуратный, спасибо, это гораздо более читаемо, чем то, что я раньше имел. – CodeDragonDM

1

См. Функцию contains.

public void sortDoc(Document doc){ 
     NodeList list = doc.getFirstChild().getChildNodes(); 
     ArrayList<String> typeList = otherSorter.getTypes(); 
     for(int i=0; i<list.getLength(); i++){ 
      if(typeList.contains(list.item(i)) { 
       //Do Thing 
      } 
     } 
    } 
+0

Да, но ArrayList делает – FaddishWorm

+0

Правильно, мой плохой – Zavior

+0

я отдал его RJ, он отправил первый и имел более мощный ответ, извините. – CodeDragonDM

Смежные вопросы