indexOf()
indexOf() ищет символ или подстроку внутри объекта String и возвращает индекс первого совпадения или -1, если val не найден.
Полная статья
Описание
indexOf() позволяет узнать, в какой позиции строки находится нужный символ или подстрока. Это удобно, когда нужно разобрать ответ от датчика, GPS-модуля или любого другого устройства, которое присылает текст в определённом формате: найти разделитель, проверить наличие ключевого слова или вычленить нужный фрагмент.
По умолчанию поиск начинается с нулевого символа, но можно указать смещение — тогда функция пропустит начало строки и начнёт искать с нужного места. Это позволяет последовательно находить все вхождения одного и того же символа или подстроки.
Синтаксис
myString.indexOf(val)myString.indexOf(val, from)
Параметры
myString: переменная типаString, в которой выполняется поиск.val: то, что нужно найти. Допустимые типы данных:char,String.from: позиция (индекс), с которой начать поиск. Если не указан, поиск идёт с начала строки.
Возвращает
Целое число: индекс первого вхождения val в строке, считая от нуля. Если совпадение не найдено, возвращается -1.
Как читать результат
- Значение
0означает, что совпадение найдено в самом начале строки — это не ошибка. - Значение
-1означает, чтоvalв строке отсутствует (или не встречается после позицииfrom, если она была задана). - Результат можно сразу использовать как индекс для
substring(), чтобы вырезать нужную часть строки.
Где применяется
- Разбор ответов от модулей. Например, ответ AT-команды содержит
"+OK"—indexOf()позволяет проверить, есть ли этот маркер в принятой строке. - Поиск разделителей. Если данные приходят в формате
"23.5,60.1", можно найти запятую и затем вырезать каждое значение отдельно. - Нахождение всех вхождений. Вызывая
myString.indexOf(val, from)в цикле и каждый раз передавая вfromпредыдущий результат плюс 1, можно перебрать все позиции нужного символа. - Валидация входных данных. Перед обработкой строки можно убедиться, что она содержит ожидаемый фрагмент, и не продолжать работу, если
indexOf()вернул-1.
Практические замечания
- Поиск чувствителен к регистру:
"Hello"и"hello"— разные строки. Если регистр не важен, приведите строку к одному регистру перед поиском с помощьюtoLowerCase()илиtoUpperCase(). - Параметр
fromудобно использовать, когда нужно найти второй, третий и последующие разделители: сохраните результат первого вызова, прибавьте 1 и передайте какfromв следующий вызов. - Если
fromбольше или равен длине строки, функция всегда вернёт-1. - Всегда проверяйте результат на
-1перед тем, как использовать его как индекс — иначеsubstring()или другие операции могут дать неожиданный результат. indexOf()возвращает позицию начала найденного фрагмента, даже еслиval— это строка из нескольких символов.