Главная chevron_right Уроки chevron_right Встроенные примеры chevron_right Строки chevron_right Функция String substring() — поиск подстрок

Функция String substring() — поиск подстрок

Учимся искать фрагменты текста внутри строки Arduino с помощью функции substring() и разбираем типичные ошибки индексов.

Функция String substring() тесно связана с charAt(), startsWith() и endsWith(). Она позволяет искать вхождение определённой подстроки внутри объекта типа String.

Необходимое оборудование

Схема подключения

Внешних компонентов для этого примера не нужно — достаточно самой платы. Подключите Arduino к компьютеру через USB и откройте монитор последовательного порта в Arduino IDE.

Плата Arduino UNO — никаких внешних компонентов не требуется

Как это работает

substring() извлекает часть строки по заданным позициям символов. Индексация начинается с нуля, как и во всех строковых операциях Arduino. Функция возвращает новый объект String — исходная строка при этом не изменяется.

Важно понимать разницу между двумя вариантами вызова:

  • Один параметр — возвращает подстроку от указанной позиции до конца строки.
  • Два параметра — возвращает подстроку от первой позиции до второй (не включая символ на второй позиции).

Код

substring() с одним параметром ищет заданную подстроку начиная с указанной позиции и до конца строки. Функция ожидает, что подстрока тянется до самого конца String. Например:

String stringOne = "Content-Type: text/html";
// substring(index) ищет подстроку начиная с позиции index и до конца:
if (stringOne.substring(19) == "html") {
}

вернёт true, тогда как

String stringOne = "Content-Type: text/html";
// substring(index) ищет подстроку начиная с позиции index и до конца:
if (stringOne.substring(19) == "htm") {
}

вернёт false — потому что после htm в строке стоит ещё l.

substring() с двумя параметрами ищет подстроку в диапазоне от первого параметра до второго. Например:

String stringOne = "Content-Type: text/html";
// можно также искать подстроку в середине строки:
if (stringOne.substring(14,18) == "text") {
}

Этот вызов ищет слово text в позициях с 14 по 18 строки.

Важно: следите за тем, чтобы значения индексов не выходили за пределы длины строки — иначе получите непредсказуемый результат. Особенно коварна вторая форма substring(): если начальный индекс меньше длины строки, а конечный — нет, ошибка может проявляться нестабильно и быть трудноуловимой.

Типичные ошибки

  • Выход индекса за границу строки. Всегда проверяйте длину строки через .length() перед тем, как передавать индексы в substring().
  • Путаница с включением/исключением конечного символа. Второй параметр — это позиция, которая уже не входит в результат. Например, substring(0, 5) вернёт символы с 0 по 4.
  • Сравнение через == вместо .equals(). Результат substring() — это объект String. Сравнивайте его с помощью .equals() или == (в Arduino оба варианта работают для String, но .equals() нагляднее).
  • Изменение исходной строки. Помните: substring() возвращает новую строку, а не изменяет исходную.

Как проверить результат

Откройте монитор последовательного порта (Ctrl+Shift+M) на скорости 9600 бод. Скетч выведет результаты сравнений подстрок — 1 означает true, 0false. Поэкспериментируйте с разными индексами, чтобы лучше понять поведение функции.

Где пригодится

substring() удобна при разборе текстовых протоколов: например, когда нужно извлечь числовое значение из строки вида "TEMP:23.5" или проверить расширение файла в имени, полученном через Serial.

Дополнительные материалы

Больше базовых уроков найдёте в разделе built-in examples.

Также рекомендуем изучить language reference — подробный справочник по языку программирования Arduino.

Последнее обновление: 11.08.2015, SM