Получить местоположение слова в массиве строк

1

Итак, у нас есть массив строк с именами фруктов. Допустим, вы хотите знать, в каком месте в массиве слово "Персик" (возвращается как целое число). Как бы вы это достигли? Я попытался найти связанную с этим статью, но не смог ее найти.

 fruits = new String[] {"Peach", "Orange", "Banana", "Plum", "Apple", "Strawberry", "Mango", "Kiwi"};
  • 0
    Переберите его и сравните строки, если вы обнаружите, что они возвращают позицию.
Теги:
string
arrays

6 ответов

5
Лучший ответ

Вам действительно нужно использовать массив для вашего прецедента? В большинстве случаев удобнее работать с коллекциями:

List<String> fruits = Arrays.asList("Peach", "Orange", "Banana", "Plum", "Apple", "Strawberry", "Mango", "Kiwi");
int i = fruits.indexOf("Apple");
  • 0
    Вы меня победили :) +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;
}
  • 0
    Обычной практикой является возврат -1, посмотрите на indexOf для списка
2

Итак, сначала первое.

Переменные фрукты не являются String, это Array of Strings. Поэтому вы можете просто перебрать его с помощью цикла for, который ищет "Peach" с помощью метода 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;
            }
        }   
    }
}

Надеюсь, это ответит на вопрос :)

Edit: Увидев, как некоторые плакаты предложили Binary Search для решения проблемы, я хочу рассмотреть потенциальную проблему, которую алгоритм двоичного поиска требует от вас сортировки списка. Поэтому он изменит индекс, который вы изначально искали.

0

Вы можете попробовать это, используя collections:

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

Просто для завершения доступных вариантов.
Вы также можете использовать алгоритм поиска, например бинарный поиск.
Обычно вы хотите сделать это, если ваш массив становится большим.

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

Примечание. Требуется sort(), поскольку большинство алгоритмов поиска работают только на отсортированные массивы.

  • 0
    зачем сортировать перед поиском?
  • 0
    Потому что бинарный поиск - это дихотомический алгоритм, который требует сортировки массива.
Показать ещё 2 комментария
-2

Хотя решение, показанное maszter, работает, это линейный поиск, поэтому он не так эффективен, как некоторые другие методы поиска. К ним относятся двоичный поиск и т.д., И им предоставляется класс java.util.Arrays в Java с синтаксисом:

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

Если требуется больше скорости, и поиск является основным использованием массива, я бы рекомендовал вместо этого использовать HashMap или HashSet.

  • 2
    Несмотря на то, что бинарный поиск действительно быстрый, важно помнить, что этот алгоритм требует сортировки данных в порядке возрастания. Пример: для массива типа String[] arr = {"c","b","a"}; результат Arrays.binarySearch(arr, "c") равен -4 .
  • 1
    +1 Пшемо. Поскольку сложность лучших алгоритмов сортировки составляет O (n log n), когда массив не имеет особых свойств, это решение на самом деле медленнее, чем линейный поиск, если массив не отсортирован.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню