Функция 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, 0 — false. Поэкспериментируйте с разными индексами, чтобы лучше понять поведение функции.
Где пригодится
substring() удобна при разборе текстовых протоколов: например, когда нужно извлечь числовое значение из строки вида "TEMP:23.5" или проверить расширение файла в имени, полученном через Serial.
Дополнительные материалы
Больше базовых уроков найдёте в разделе built-in examples.
Также рекомендуем изучить language reference — подробный справочник по языку программирования Arduino.
Последнее обновление: 11.08.2015, SM