JavaRush /Java блог /Random UA /Метод IndexOf класу String: навіщо він потрібний і як пра...

Метод IndexOf класу String: навіщо він потрібний і як працює

Стаття з групи Random UA
Вітання! Програмісти часто користуються методами на автоматі, не замислюючись, як вони працюють. Йдеться про базові методи, які ви повинні знати.

Що таке навантаження методів?

Перш, ніж ми розглянемо метод, про який згадали в заголовку, давайте згадаємо (а хтось і дізнається), що таке навантаження методів. Перевантаження методів Java дозволяє визначення всередині одного класу двох або більше методів з тим самим ім'ям. Це можливо тільки в тому випадку, якщо вони мають різні вхідні параметри. У цьому випадку методи називають перевантаженими, а сам процес — перевантаженням методів. Метод IndexOf класу String: навіщо він потрібен і як працює.Перевантаження методів - це один із основоположних принципів поліморфізму в Java.

Для чого потрібний метод indexOfкласуString

Уявіть, що у вас є довгий рядок. Наприклад, лист, і вам потрібно знайти місце, де відбувається перше звернення до адресаата на ім'я, яке ви вже знаєте. Як ви це зробите? Скористаєтеся методом indexOf javaкласу String. Цей метод - типовий приклад навантаження методів, про яку ми говорабо вище.

Варіанти методуindexOf

Метод java string indexOfмає чотири різні варіації:

№1.indexOf(int ch)

Метод int indexOf(int ch)повертає індекс у даному рядку першого входження вказаного символу. Іншими словами, ми отримаємо номер першого входження заданого символу, рахуючи ліворуч-праворуч. Приклад:
public static void main(String[] args) {
   String str = "Diego, where is my money?";
   int value = str.indexOf('e');
   System.out.println(value);
}
Виведення в консоль:

2
Якщо ж символ, який ми шукаємо, відсутній у даному рядку, ми отримаємо -1.
public static void main(String[] args) {
   String str = "Diego, where is my money?";
   int value = str.indexOf('j');
   System.out.println(value);
}
Виведення в консоль:

-1
PS Щоб нічого не переплутати, потрібно не забувати, що відлік символів у рядку йде не з 1,2,3 ..., а з 0,1,2 ...

№2.indexOf(int ch, int fromIndex)

Метод int indexOf(int ch, int fromIndex)повертає індекс у цьому рядку першого входження вказаного символу, починаючи пошук за вказаним індексом. Цей метод є більш модернізованою версією попереднього. З різницею в тому, що ми вказуємо номер елемента, з якого, власне, і почнеться пошук. Приклад:
public static void main(String[] args) {
   String str = "Diego, where is my money?";
   int value = str.indexOf('e',5);
   System.out.println(value);
}
Виведення в консоль:

9
Якщо індекс, з якого буде вестися пошук, перевищує довжину рядка, відповідь буде -1. Метод IndexOf класу String: навіщо він потрібен і як працюєЯк ви напевно помітабо, в сигнатурі цих двох методів (те, що приймають методи як аргументи), тип для символу, що передається, вказаний як int, а не char. Проте ми передавали char. Все тому, що рядки зберігаються у вигляді масиву байтів, де осередки відповідає певному символу типу char. Відповідність між байтами charпроводиться за таблицею ASCII. ASCII (American standard code for information interchange) - таблиця, в якій поширені друковані та недруковані символи зіставлені з числовими кодами. Тому коли передається певний символchar, він автоматично конвертується в число, яке представляє цей символ таблиці ASCII. Виходячи з цього, ми можемо передати до методу безпосередньо число ( int), яке відповідає потрібному нам символу. Наприклад, символу 'e' у таблиці ASCII відповідає число 101, тому ми можемо повторити попередній приклад, але вже без char:
public static void main(String[] args) {
   String str = "Diego, where is my money?";
   int value = str.indexOf(101,5);
   System.out.println(value);
}
Висновок у консоль у нас не змінився:

9
PS У деяких випадках дані методи взаємозамінні, як наприклад str.indexOf('e');буде аналогічний - str.indexOf('e', 0);.

№3.indexOf(String str)

Метод int indexOf(String str)повертає індекс у даному рядку першого входження зазначеного підрядка. Він кардинально відрізняється від першого варіанта тим, що даний метод шукає вже цілий підряд ( String). Завдяки цьому ми можемо шукати вже щось конкретніше. Приклад:
public static void main(String[] args) {
   String str = "Diego, where is my money? Diego,you made me very upset";
   int value = str.indexOf("Diego");
   System.out.println(value);
}
Виведення в консоль:

0
PS Усі варіації indexOfчутливі до регістру: символи верхнього регістру (великі літери) та символи нижнього регістру (маленькі літери) вважаються різними. Будьте уважні.

№4.indexOf(String str, int fromIndex)

Метод indexOf(String str, int fromIndex)повертає індекс у цьому рядку першого входження зазначеного підрядка, починаючи із зазначеного індексу. Даний варіант є знову ж таки більш модернізованим попереднім варіантом, але вже із зазначенням місця, з якого буде вестися пошук. Приклад:
public static void main(String[] args) {
   String str = "Diego, where is my money? Diego,you made me very upset";
   int value = str.indexOf("Diego", 1);
   System.out.println(value);
}
Виведення в консоль:

26
PS Якщо задати негативний стартовий індекс, то метод indexOfсприйме його як 0. У такому випадку метод знову ж таки стане аналогічним попередньому (у якому не вказано стартовий індекс). Це все на сьогодні. Тепер твій запас знань став більшим завдяки indexOfJava!
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ