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

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

Прежде, чем мы рассмотрим метод, о котором упомянули в заголовке, давайте вспомним (а кто-то и узнает), что такое перегрузка методов. Перегрузка методов 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!