2011-09-28 20 views
14

Estoy familiarizado con las maneras en que puedo obtener una posición del elemento en la matriz, en especial los que mostró aquí: Element position in arrayJava - Obtener posición del elemento en la matriz

Pero mi problema es que no puedo encontrar la manera de convertir este código para satisfacer mis necesidades.

Lo que quiero comprobar es si un String tiene una coincidencia en un ArrayList y, de ser así, cuál es el índice del String en el ArrayList.

La parte molesta es logré comprobar la cadena está en el ArrayList (ver primera línea de mi código)

listpackages es el ArrayList

current_package es la cadena Quiero encontrar su posición en listpackages .

Aquí está mi código:

if (listPackages.contains(current_package)) { 

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

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

agradecería cualquier ayuda!

Gracias!

+1

Además, no use == para comparar objetos en Java, incluso Strings. Siempre use el método igual. –

+0

Gracias, tienes razón ... error honesto de copiar y pegar :) –

Respuesta

36

Uso indexOf:

int index = listPackages.indexOf(current_package); 

Tenga en cuenta que no se debe utilizar generalmente == para comparar cadenas - que comparará referencias, es decir, si los dos valores son referencias al mismo objeto, en lugar de a la igualdad instrumentos de cuerda. En su lugar, debe llamar al equals(). Probablemente eso sea lo que estaba pasando con su código existente, pero obviamente usar indexOf es mucho más simple.

+0

+1 y gracias, tu respuesta me ayudó –

3

sólo tiene que utilizar la llamada listPackages.indexOf(current_package);

ArrayList.contains(Object o) llamadas indexOf(Object o) internamente en 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 esto ayudará you.change su código como este:

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

también si se quiere hacer variable de posición global a la que puede acceder a su valor fuera de este bloque de código. :)

+0

Funciona, pero no hay necesidad de recorrer la lista dos veces. Solo usa indexOf. Si el arraylist no contiene la cadena, esto devolverá -1 – Steve

+0

Sí, tiene razón. Pero, ¿y si ese ArrayList no contiene un String e intentará encontrar su índice? ¿Habrá alguna excepción? Supongo que sí, pero tengo No intenté este tipo sin embargo. –

+0

sin excepción, devolverá -1 – Steve

Cuestiones relacionadas