2011-09-28 79 views
14

元素位置我熟悉的方式,我可以得到在数组中的元素的位置,特别是那些表明这里:Element position in array爪哇 - 获得数组

但我的问题是我无法弄清楚如何转换此代码适合我的需求。

我要检查什么是一个字符串有一个ArrayList的匹配,如果是,什么是ArrayList中字符串的索引。

恼人的是我成功地验证字符串是在ArrayList中(见我的第一行代码)

listPackages是ArrayList的

current_package是我想找到它在listPackages位置字符串。

这里是我的代码:

if (listPackages.contains(current_package)) { 

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

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

希望得到任何帮助!

谢谢!

+1

另外,请不要使用==来比较的Java对象,甚至是字符串。始终使用等号方法。 –

+0

谢谢,你是对的...复制粘贴:) –

回答

36

使用indexOf

int index = listPackages.indexOf(current_package); 

请注意,您应该不一般使用==比较字符串 - 将比较引用,即两个值是否是,同一个对象的引用,而不是等于字符串。相反,您应该拨打equals()。这可能是你现有的代码出错了,但显然使用indexOf要简单得多。

+0

+1和感谢的诚实的错误,你的回答让我 –

3

只使用通话listPackages.indexOf(current_package);

ArrayList.contains(Object o)电话indexOf(Object o)在内部的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

合Ë这将帮助你you.change这样的代码:

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

此外,如果你将位置变量作为全球你可以的代码块外部访问它的价值。 :)

+0

作品,但没有必要遍历列表的两倍。只需使用indexOf。如果ArrayList中不包含字符串则返回-1 – Steve

+0

是的,你是什么right.But如果ArrayList中亘古不变的包含字符串,你会尝试找到它的indexOf.Will有任何例外呢?我想是这样的,但我有没有尝试过这种类型。 –

+0

也不例外,它会返回-1 – Steve