所以我们有一个带有水果名称的字符串数组。假设您想知道数组中“Peach”这个词在哪个位置(以整数形式返回)。你会如何实现这一目标?我试着找到一篇相关的文章,但却找不到。
fruits = new String[] {"Peach", "Orange", "Banana", "Plum", "Apple", "Strawberry", "Mango", "Kiwi"};
答案 0 :(得分:5)
您真的需要为您的用例使用数组吗?大多数情况下,使用集合更加舒适:
List<String> fruits = Arrays.asList("Peach", "Orange", "Banana", "Plum", "Apple", "Strawberry", "Mango", "Kiwi");
int i = fruits.indexOf("Apple");
答案 1 :(得分:3)
您可以添加一些NPE检查,但通常是:
int getIndex(String word, String[] array) {
for (int i = 0; i < array.length; i++) {
if (array[i].equals(word)) {
return i;
}
}
return -1;
}
答案 2 :(得分:2)
所以,首先要做的事情。
变量fruits不是String,它是一个字符串数组。因此,您可以使用for循环搜索&#34; Peach&#34;简单地迭代它。使用String.equals()方法。
public class Test {
public static void main(String[] args) {
String[] fruits = new String[] {"Peach", "Orange", "Banana", "Plum", "Apple", "Strawberry", "Mango", "Kiwi"};
int out = -1;
for(int i = 0 ; i < fruits.length ; i++) {
if (fruits[i].equals("Peach")) {
System.out.println("\"Peach\" was found at index: " + i);
out = i;
}
}
}
}
希望这回答问题:)
编辑:看到一些海报如何建议二元搜索解决问题,我想解决二进制搜索算法要求您对列表进行排序的潜在问题。因此,它将更改您最初查找的索引。
答案 3 :(得分:0)
您可以使用collections
:
List<String> f = Arrays.asList("Peach", "Orange", "Banana", "Plum", "Apple", "Strawberry", "Mango", "Kiwi");
int i = f.indexOf("Apple");
答案 4 :(得分:0)
只是为了完成可用的选项 您也可以使用搜索算法,例如binary search 通常,如果阵列变大,通常需要这样做。
Arrays.sort(fruits);
int position = Arrays.binarySearch(fruits, "Peach");
注意:需要sort()
,因为大多数搜索算法仅适用于已排序的数组。
答案 5 :(得分:-1)
虽然maszter显示的解决方案有效,但它是线性搜索,因此不如其他一些搜索方法有效。这些包括二进制搜索等,它们在Java中提供了类java.util.Arrays
,语法为:
Arrays.binarySearch(array, word); //A much faster approach
如果需要更高的速度并且搜索是数组的主要用途,我建议使用HashMap或HashSet。