JavaRush /Java блог /Random /Метод IndexOf класса String: зачем он нужен и как работае...
Автор
Василий Малик
Senior Java-разработчик в CodeGym

Метод IndexOf класса String: зачем он нужен и как работает

Статья из группы Random
Привет! Программисты часто пользуются методами на автомате, не задумываясь, как они работают. Речь идет о базовых методах, которые вы обязаны знать.

Что такое перегрузка методов?

Прежде, чем мы рассмотрим метод, о котором упомянули в заголовке, давайте вспомним (а кто-то и узнает), что такое перегрузка методов. Перегрузка методов Java разрешает определение внутри одного класса двух или более методов с одним и тем же именем. Это возможно только в том случае, если у них есть разные входящие параметры. В этом случае методы и называют перегруженными, а сам процесс — перегрузкой методов.Метод IndexOf класса String: зачем он нужен и как работает - 1Перегрузка методов — это один из основополагающих принципов полиморфизма в 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
P. S. Чтобы ничего не перепутать, нужно не забывать, что отсчет символов в строке идет не с «‎1,2,3…»‎, а с «‎0,1,2...»‎

№ 2. indexOf(int ch, int fromIndex)

Метод int indexOf(int ch, int fromIndex) возвращает индекс в этой строке первого вхождения указанного символа, начиная поиск по указанному индексу. Данный метод является более модернизированной версией предыдущего. C разницей в том, что мы указываем номер элемента, с которого собственно и начнется поиск. Пример:

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: зачем он нужен и как работает - 2Как вы наверное заметили, в сигнатуре этих двух методов (то, что принимают методы в качестве аргументов), тип для передаваемого символа указан как 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
P. S. В некоторых случаях данные методы взаимозаменяемые, как вот например 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
P. S. Все вариации 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
P. S. Если задать отрицательный стартовый индекс, то метод indexOf воспримет его как 0. В таком случае метод опять же станет аналогичен предыдущему (в котором не указан стартовый индекс). Это все на сегодня. Теперь твой запас знаний стал больше благодаря indexOf Java!
Комментарии (19)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Anonymous #3346440 Уровень 2
6 сентября 2023
А что если в слове две или три одинаковые буквы и надо получить индекс всех этих букв?
Private Joker Уровень 25
25 февраля 2023
Не очень понял термин "вхождения" чего, куда, как это работает, то что входит?
Ro_ Уровень 11
21 ноября 2022
Спасибо, хорошее дополнение к статье курса
Yaten Ko Уровень 4
26 января 2022
Не пойму, почему в конце вышло 26, кто нибудь обьяснит?
Serhio Gonsales Уровень 35
4 августа 2021
Понял
Jack Daniel Уровень 28
29 мая 2021
Больше статей с лягушками!
Павел Уровень 32
24 августа 2020
"Это все на сегодня" или "Это всё на сегодня"?
Interstellar Уровень 36 Expert
20 августа 2020
После лягушки во 2-м абзаце у вас дважды ACII вместо ASCII.
Итай Уровень 40 Expert
20 августа 2020
А у вас стол заказов работает? Нужно больше статей на сложные темы: Рекурсия, рефлексия, алгоритмы сортировок и ветвлений в коллекциях и т.д.