String indexOf() и lastIndexOf(): поиск символов в строке
Узнайте, как находить первое и последнее вхождение символа в строку Arduino с помощью методов indexOf() и lastIndexOf().
Методы indexOf() и lastIndexOf() позволяют искать символы внутри объекта String — это удобно при разборе текстовых данных, HTML-тегов, CSV-строк и любых других форматов, где нужно найти определённый символ или подстроку.
Метод indexOf() возвращает позицию первого вхождения заданного символа в строку. Отсчёт позиций начинается с нуля. Дополнительно можно указать смещение — поиск начнётся не с начала строки, а с указанной позиции.
Метод lastIndexOf() работает аналогично, но ищет последнее вхождение символа — то есть просматривает строку с конца.
Как это работает
Рассмотрим пример с HTML-строкой вида <HEAD><BODY>. Найдём первую закрывающую угловую скобку:
String stringOne = "<HTML><HEAD><BODY>";
int firstClosingBracket = stringOne.indexOf('>');
В данном случае firstClosingBracket равно 5, потому что первый символ > находится на позиции 5 (нумерация с нуля). Чтобы найти вторую закрывающую скобку, используем найденную позицию как смещение и начинаем поиск с firstClosingBracket + 1:
stringOne = "<HTML><HEAD><BODY>";
int secondClosingBracket = stringOne.indexOf('>', firstClosingBracket + 1 );
Результат — 11: это позиция закрывающей скобки тега HEAD.
Чтобы искать с конца строки, используйте метод lastIndexOf(). Он возвращает позицию последнего вхождения символа:
stringOne = "<HTML><HEAD><BODY>";
int lastOpeningBracket = stringOne.lastIndexOf('<');
Здесь lastOpeningBracket равно 12 — это позиция символа < для тега BODY. Открывающая скобка тега HEAD находится на позиции stringOne.lastIndexOf('<', lastOpeningBracket -1), то есть на позиции 6.
Практические замечания
- Если символ не найден, оба метода возвращают
-1. Всегда проверяйте результат перед дальнейшим использованием позиции. - Позиции возвращаются как
int, поэтому при работе с длинными строками убедитесь, что длина строки не превышает диапазонint. - Методы чувствительны к регистру:
'A'и'a'— разные символы. - Комбинируя indexOf() и lastIndexOf(), можно извлекать подстроки между парными символами — например, содержимое HTML-тегов или значения между кавычками.
Типичные ошибки
- Не проверяется результат
-1: если символ не найден, а вы используете позицию вsubstring(), получите непредсказуемый результат или ошибку. - Путаница с отсчётом: помните, что первый символ строки имеет индекс
0, а не1. - Неправильное смещение: при поиске следующего вхождения не забывайте прибавлять
1к найденной позиции, иначе метод снова вернёт ту же позицию.
Необходимое оборудование
Схема подключения
Дополнительные компоненты для этого примера не нужны. Достаточно подключить плату к компьютеру через USB и открыть монитор порта в Arduino IDE.

Схема подключения: плата Arduino UNO без дополнительных компонентов — результаты выводятся в монитор порта.
Код
Как проверить результат
После загрузки скетча откройте монитор порта (Ctrl+Shift+M или через меню «Инструменты»). Вы увидите позиции найденных символов, выведенные построчно. Сравните их с ожидаемыми значениями из описания выше — это поможет убедиться, что поиск работает правильно.
Дополнительные материалы
Больше базовых примеров можно найти в разделе built-in examples.
Подробное описание всех функций языка Arduino доступно в language reference.
Последнее обновление: 2015/08/11, SM