Главная chevron_right Переменные и константы chevron_right Типы данных chevron_right substring()

substring()

substring() возвращает фрагмент строки String от позиции from до to (не включая to), или до конца строки, если to не указан.

Полная статья

Описание

Метод substring() возвращает фрагмент строки, начиная с заданной позиции. Начальный индекс включается в результат, а конечный — нет: символ на позиции to в подстроку не попадёт. Если конечный индекс не указан, метод вернёт всё, что идёт от from до конца строки.

Это удобно, когда нужно разобрать принятую команду, вырезать часть числа из текстового буфера или отделить префикс от значения.

Синтаксис

  • myString.substring(from)
  • myString.substring(from, to)

Параметры

  • myString: переменная типа String, из которой извлекается подстрока
  • from: индекс первого символа, который войдёт в результат (нумерация с нуля)
  • to (необязательно): индекс символа, на котором подстрока заканчивается — сам этот символ в результат не включается

Возвращает

Новый объект типа String, содержащий запрошенный фрагмент исходной строки.

Как читать результат

Индексы работают по той же логике, что и в большинстве языков: from — включительно, to — исключительно. Например, для строки "Arduino" вызов myString.substring(0, 3) вернёт "Ard", а myString.substring(3)"uino".

Если from равен to, результатом будет пустая строка. Если from больше длины строки, результат тоже будет пустым — ошибки не возникнет, но и ничего полезного не вернётся. Стоит проверять длину строки через length() перед вызовом, если индексы вычисляются динамически.

Где применяется

  • Разбор команд по Serial: если устройство получает строки вида "CMD:VALUE", можно вырезать часть после двоеточия через substring(4).
  • Форматирование вывода: обрезать длинную строку до нужного числа символов перед отправкой на дисплей.
  • Парсинг данных с датчиков: некоторые модули (GPS, GSM) возвращают текстовые ответы, из которых нужно извлечь конкретное поле по известной позиции.
  • Проверка префикса или суффикса: сравнить myString.substring(0, 2) с ожидаемым заголовком пакета.

Практические замечания

  • Нумерация символов начинается с 0, как в массивах.
  • Метод не изменяет исходную строку — он возвращает новый объект String.
  • Частое создание подстрок во встроенных системах с ограниченной памятью (например, Arduino Uno) может привести к фрагментации кучи. Если это критично, рассмотрите работу с char-массивами и функциями strncpy / strtok.
  • Если to меньше from, поведение может быть неожиданным: некоторые реализации автоматически меняют их местами. Лучше не полагаться на это и всегда передавать корректный порядок.
  • Результат можно сразу сравнивать: if (myString.substring(0, 3) == "GET") { ... } — это читаемо и работает надёжно.