String startsWith() и endsWith() — проверка начала и конца строки
Узнайте, как использовать функции startsWith() и endsWith() для проверки того, с чего начинается или заканчивается строка в Arduino.
Функции startsWith() и endsWith() из класса String позволяют проверить, начинается или заканчивается ли строка определённым символом или подстрокой. По сути, это удобные частные случаи функции substring — они делают код чище и понятнее.
Необходимое оборудование
Схема подключения
Внешних компонентов для этого примера не нужно — достаточно подключить плату к компьютеру через USB и открыть Serial Monitor в Arduino IDE.

Плата Arduino UNO — никаких внешних компонентов не требуется.
Как это работает
startsWith() проверяет, начинается ли строка с указанной подстроки, а endsWith() — заканчивается ли ею. Оба метода возвращают true или false, что делает их удобными в условиях if.
Важная деталь: оба метода принимают необязательный второй аргумент — смещение (offset). Это позволяет искать подстроку не с самого начала строки, а начиная с произвольной позиции. Именно в этом их сходство с substring().
Код
startsWith() и endsWith() удобно использовать для разбора заголовков сообщений или для проверки конкретного символа в конце строки. Их также можно применять со смещением, чтобы искать подстроку, начиная с определённой позиции. Например:
stringOne = "HTTP/1.1 200 OK";
if (stringOne.startsWith("200 OK", 9)) {
Serial.println("Got an OK from the server");
}
Это функционально эквивалентно следующему:
stringOne = "HTTP/1.1 200 OK";
if (stringOne.substring(9) == "200 OK") {
Serial.println("Got an OK from the server");
}
Важно: Если вы передаёте индекс за пределами длины строки, результат будет непредсказуемым. Например, в примере выше вызов stringOne.startsWith("200 OK", 16) будет проверять не саму строку, а то, что находится в памяти сразу за ней. Чтобы избежать подобных ошибок, убедитесь, что индексы для startsWith и endsWith всегда находятся в диапазоне от 0 до значения length() строки.
/*
String startWith() и endsWith()
Примеры использования startsWith() и endsWith() для строк
создан 27 июл 2010
изменён 2 апр 2012
автор Tom Igoe
Код примера находится в открытом доступе.
https://www.arduino.cc/en/Tutorial/StringStartsWithEndsWith
*/
void setup() {
// Открываем последовательный порт и ждём его готовности:
Serial.begin(9600);
while (!Serial) {
; // ожидание подключения к последовательному порту. Нужно только для native USB
}
// отправляем вступление:
Serial.println("\n\nString startsWith() and endsWith():");
Serial.println();
}
void loop() {
// startsWith() проверяет, начинается ли строка с заданной подстроки:
String stringOne = "HTTP/1.1 200 OK";
Serial.println(stringOne);
if (stringOne.startsWith("HTTP/1.1")) {
Serial.println("Server's using http version 1.1");
}
// также можно искать startsWith() начиная с заданной позиции в строке:
stringOne = "HTTP/1.1 200 OK";
if (stringOne.startsWith("200 OK", 9)) {
Serial.println("Got an OK from the server");
}
// endsWith() проверяет, заканчивается ли строка определённым символом:
String sensorReading = "sensor = ";
sensorReading += analogRead(A0);
Serial.print(sensorReading);
if (sensorReading.endsWith("0")) {
Serial.println(". This reading is divisible by ten");
} else {
Serial.println(". This reading is not divisible by ten");
}
// бесконечное ожидание:
while (true);
}
Типичные ошибки
- Выход за границы строки. Передача слишком большого смещения — самая частая проблема. Всегда проверяйте, что
offset < stringOne.length(). - Сравнение с учётом регистра. Функции
startsWith()иendsWith()чувствительны к регистру:"Hello"и"hello"— разные строки. Если регистр может варьироваться, приведите строку к единому виду перед проверкой. - Пустая строка. Если передать пустую строку
""в качестве аргумента,startsWith("")всегда вернётtrue— это корректное поведение, но может удивить.
Как проверить результат
Откройте Serial Monitor (скорость 9600 бод) после загрузки скетча. Вы увидите результаты проверок в виде сообщений — true или false для каждого условия. Это удобный способ убедиться, что логика разбора строк работает именно так, как вы ожидаете.
Где пригодится
- Разбор ответов от HTTP-сервера или AT-команд GSM-модуля: проверить, начинается ли строка с
"OK","ERROR"или"HTTP/1.1 200". - Фильтрация входящих Serial-сообщений по префиксу команды.
- Проверка расширения файла на SD-карте: заканчивается ли имя файла на
".txt"или".csv".
Дополнительные материалы
Больше базовых примеров вы найдёте в разделе built-in examples.
Также рекомендуем изучить language reference — подробный справочник по языку программирования Arduino.
Последнее обновление: 11.08.2015, SM