2011-09-28 12 views
14

ho familiarità con i modi che posso ottenere una posizione di elemento dell'array, in particolare quelli mostrato qui: Element position in arrayJava - ottenere la posizione elemento in ordine di

Ma il mio problema è che non riesco a capire come convertire questo codice per soddisfare le mie esigenze.

Quello che voglio verificare è se una stringa ha una corrispondenza in un ArrayList e, in tal caso, qual è l'indice della stringa in ArrayList.

La parte fastidiosa è sono riuscito a verificare la stringa è nel ArrayList (vedi prima riga del mio codice)

listPackages è l'ArrayList

current_package è la stringa voglio trovare la propria posizione in listPackages .

Ecco il mio codice:

if (listPackages.contains(current_package)) { 

     int position = -1; 
     for(int j = 0; j < listPackages.size(); j++) { 

      if(listPackages[j] == current_package) { 
       position = j; 
        break; 
       } 
      } 
    } 

Gradirei qualsiasi aiuto!

Grazie!

+1

Inoltre, si prega di non utilizzare == per confrontare oggetti in Java, anche stringhe. Usa sempre il metodo equals. –

+0

Grazie, hai ragione ... onesto errore di copia-incolla :) –

risposta

36

Uso indexOf:

int index = listPackages.indexOf(current_package); 

Si noti che non si dovrebbe in genere utilizzare == per confrontare le stringhe - che metterà a confronto riferimenti, vale a dire se i due valori sono riferimenti allo stesso oggetto, piuttosto che alla parità stringhe. Invece, dovresti chiamare lo equals(). Questo è probabilmente quello che stava andando storto con il tuo codice esistente, ma ovviamente usare indexOf è molto più semplice.

+0

+1 e grazie, la tua risposta mi ha aiutato –

3

basta usare la chiamata listPackages.indexOf(current_package);

ArrayList.contains(Object o) chiamate indexOf(Object o) internamente ArrayList:

/** 
* Returns <tt>true</tt> if this list contains the specified element. 
* More formally, returns <tt>true</tt> if and only if this list contains 
* at least one element <tt>e</tt> such that 
* <tt>(o==null&nbsp;?&nbsp;e==null&nbsp;:&nbsp;o.equals(e))</tt>. 
* 
* @param o element whose presence in this list is to be tested 
* @return <tt>true</tt> if this list contains the specified element 
*/ 
public boolean contains(Object o) { 
return indexOf(o) >= 0; 
} 
1

Hop e questo aiuterà you.change il codice in questo modo:

if (listPackages.contains(current_package)){ 
int position=listPackages.indexOf(current_package); 
} 

anche se si farà variabile posizione globale si può accedere al suo valore al di fuori di questo blocco di codice. :)

+0

Funziona ma non è necessario attraversare la lista due volte. Basta usare indexOf. Se l'arraylist non contiene la stringa, restituirà -1 – Steve

+0

Sì, hai ragione. Ma se ArrayList non contiene una stringa e proverai a trovarla indexOf. Ci saranno eccezioni? non provato questo tipo però. –

+0

non fa eccezione, restituirà -1 – Steve

Problemi correlati