Java 获取字符串数组中单词的位置

Java 获取字符串数组中单词的位置,java,arrays,string,Java,Arrays,String,因此,我们有一个字符串数组,其中包含水果的名称。假设您想知道单词Peach作为整数返回到数组中的哪个位置。你将如何做到这一点?我试图找到一篇与此相关的文章,但没有找到 fruits = new String[] {"Peach", "Orange", "Banana", "Plum", "Apple", "Strawberry", "Mango", "Kiwi"}; 您可以添加一些NPE检查,但通常: int getIndex(String word, String[] array) {

因此,我们有一个字符串数组,其中包含水果的名称。假设您想知道单词Peach作为整数返回到数组中的哪个位置。你将如何做到这一点?我试图找到一篇与此相关的文章,但没有找到

 fruits = new String[] {"Peach", "Orange", "Banana", "Plum", "Apple", "Strawberry", "Mango", "Kiwi"};

您可以添加一些NPE检查,但通常:

int getIndex(String word, String[] array) {
    for (int i = 0; i < array.length; i++) {
        if (array[i].equals(word)) {
             return i;
        }
    }
    return -1;
}

您可以添加一些NPE检查,但通常:

int getIndex(String word, String[] array) {
    for (int i = 0; i < array.length; i++) {
        if (array[i].equals(word)) {
             return i;
        }
    }
    return -1;
}

您真的需要为您的用例使用数组吗?大多数情况下,与收藏一起使用会更舒适:

List<String> fruits = Arrays.asList("Peach", "Orange", "Banana", "Plum", "Apple", "Strawberry", "Mango", "Kiwi");
int i = fruits.indexOf("Apple");

您真的需要为您的用例使用数组吗?大多数情况下,与收藏一起使用会更舒适:

List<String> fruits = Arrays.asList("Peach", "Orange", "Banana", "Plum", "Apple", "Strawberry", "Mango", "Kiwi");
int i = fruits.indexOf("Apple");

您可以使用以下集合尝试此操作:


您可以使用以下集合尝试此操作:


只是为了完成可用的选项。 您还可以使用搜索算法,如。 通常,如果阵列变大,则需要执行此操作

 Arrays.sort(fruits);
 int position = Arrays.binarySearch(fruits, "Peach");

注意:需要排序,因为大多数搜索算法只在排序的数组上工作

只需完成可用选项即可。 您还可以使用搜索算法,如。 通常,如果阵列变大,则需要执行此操作

 Arrays.sort(fruits);
 int position = Arrays.binarySearch(fruits, "Peach");

注意:需要排序,因为大多数搜索算法只在排序的数组上工作

尽管maszter给出的解决方案有效,但它是一种线性搜索,因此不如其他一些搜索方法有效。这些包括二进制搜索等,它们随java中的java.util.array类一起提供,语法如下:

Arrays.binarySearch(array, word); //A much faster approach

如果需要更快的速度,并且搜索是数组的主要用途,我建议使用HashMap或HashSet来代替。

尽管maszter给出的解决方案有效,但它是线性搜索,因此不如其他一些搜索方法有效。这些包括二进制搜索等,它们随java中的java.util.array类一起提供,语法如下:

Arrays.binarySearch(array, word); //A much faster approach

如果需要更高的速度,并且搜索是数组的主要用途,我建议使用HashMap或HashSet来代替

变量fruits不是字符串,而是字符串数组。因此,您可以使用String.equals方法通过for循环搜索Peach来简单地对其进行迭代

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;
            }
        }   
    }
}
希望这能回答这个问题:


编辑:看到一些海报如何建议使用二进制搜索来解决这个问题,我想解决一个潜在的问题,即二进制搜索算法要求您对列表进行排序。因此,它将更改您最初寻找的索引。

所以,首先要做的事情

变量fruits不是字符串,而是字符串数组。因此,您可以使用String.equals方法通过for循环搜索Peach来简单地对其进行迭代

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;
            }
        }   
    }
}
希望这能回答这个问题:



编辑:看到一些海报如何建议使用二进制搜索来解决这个问题,我想解决一个潜在的问题,即二进制搜索算法要求您对列表进行排序。因此,它将更改您最初查找的索引。

如果发现它返回位置,则对其进行迭代并比较字符串。如果发现它返回位置,则对其进行迭代并比较字符串。返回-1是常见做法,查看列表的indexOf返回-1是常见做法,查看列表的indexOf You beat me to它:+1 You beat me to它:+1为什么在搜索之前进行排序?因为二进制搜索是一种二分法算法,需要对数组进行排序。因此它将返回与不进行排序时不同的值是,就是这样。为什么在搜索之前先排序?因为二进制搜索是一种二分法算法,需要对数组进行排序。因此它将返回与不进行排序时不同的值是的,就是这样。虽然二进制搜索确实很快,必须记住,此算法要求数据按升序排序。例如:对于类似数组的字符串[]arr={c,b,a};Arrays.binarySearcharr的结果是-4.+1 Pshemo。由于当数组没有特定属性时,最佳排序算法的复杂性在logn上,因此如果数组未排序,此解决方案实际上比线性搜索慢。虽然二进制搜索确实很快,但重要的是要记住,此算法要求数据按升序排序。例如:对于类似数组的字符串[]arr={c,b,a};Arrays.binarySearcharr的结果是-4.+1 Pshemo。由于当数组没有特定属性时,最佳排序算法的复杂性在logn上,因此如果数组没有排序,此解决方案实际上比线性搜索慢。