Главная chevron_right Уроки chevron_right Встроенные примеры chevron_right Строки chevron_right String indexOf() и lastIndexOf(): поиск символов в строке

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