Итак, у нас есть массив строк с именами фруктов. Допустим, вы хотите знать, в каком месте в массиве слово "Персик" (возвращается как целое число). Как бы вы это достигли? Я попытался найти связанную с этим статью, но не смог ее найти.
fruits = new String[] {"Peach", "Orange", "Banana", "Plum", "Apple", "Strawberry", "Mango", "Kiwi"};
Вам действительно нужно использовать массив для вашего прецедента? В большинстве случаев удобнее работать с коллекциями:
List<String> fruits = Arrays.asList("Peach", "Orange", "Banana", "Plum", "Apple", "Strawberry", "Mango", "Kiwi");
int i = fruits.indexOf("Apple");
Вы можете добавить некоторую проверку NPE, но обычно:
int getIndex(String word, String[] array) {
for (int i = 0; i < array.length; i++) {
if (array[i].equals(word)) {
return i;
}
}
return -1;
}
Итак, сначала первое.
Переменные фрукты не являются 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 для решения проблемы, я хочу рассмотреть потенциальную проблему, которую алгоритм двоичного поиска требует от вас сортировки списка. Поэтому он изменит индекс, который вы изначально искали.
Вы можете попробовать это, используя collections
:
List<String> f = Arrays.asList("Peach", "Orange", "Banana", "Plum", "Apple", "Strawberry", "Mango", "Kiwi");
int i = f.indexOf("Apple");
Просто для завершения доступных вариантов.
Вы также можете использовать алгоритм поиска, например бинарный поиск.
Обычно вы хотите сделать это, если ваш массив становится большим.
Arrays.sort(fruits);
int position = Arrays.binarySearch(fruits, "Peach");
Примечание. Требуется sort()
, поскольку большинство алгоритмов поиска работают только на отсортированные массивы.
Хотя решение, показанное maszter, работает, это линейный поиск, поэтому он не так эффективен, как некоторые другие методы поиска. К ним относятся двоичный поиск и т.д., И им предоставляется класс java.util.Arrays
в Java с синтаксисом:
Arrays.binarySearch(array, word); //A much faster approach
Если требуется больше скорости, и поиск является основным использованием массива, я бы рекомендовал вместо этого использовать HashMap или HashSet.
String[] arr = {"c","b","a"};
результат Arrays.binarySearch(arr, "c")
равен -4
.