我熟悉我可以在数组中获取元素位置的方法,尤其是这里显示的元素:Element position in array
但我的问题是我无法弄清楚如何转换此代码以满足我的需求。
我想检查的是String是否在ArrayList中匹配,如果是,那么ArrayList中String的索引是什么。
烦人的部分是我设法验证String在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;
}
}
}
非常感谢任何帮助!
谢谢!
答案 0 :(得分:41)
使用indexOf
:
int index = listPackages.indexOf(current_package);
请注意,您通常不应使用==
来比较字符串 - 这将比较引用,即两个值是否是对同一对象的引用,而不是相等的字符串。相反,您应该致电equals()
。这可能是您现有代码出现问题的原因,但显然使用indexOf
要简单得多。
答案 1 :(得分:3)
只需使用致电listPackages.indexOf(current_package);
ArrayList.contains(Object o)
在ArrayList内部调用indexOf(Object o)
:
/**
* 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 ? e==null : 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;
}
答案 2 :(得分:2)
希望这会对你有所帮助。像这样改变你的代码:
if (listPackages.contains(current_package)){
int position=listPackages.indexOf(current_package);
}
此外,如果您将位置变量设置为全局,则可以在此代码块之外访问其值。 :)
答案 3 :(得分:1)
使用indexof方法获取位置 -
listPackages.indexOf(current_package)
http://download.oracle.com/javase/1.4.2/docs/api/java/util/ArrayList.html#indexOf(java.lang.Object)