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 — это строка из нескольких символов.