Команды String length() и trim()
Узнайте, как получить длину строки с помощью length() и убрать лишние пробелы с помощью trim() на Arduino.
Работая со строками в Arduino, вы рано или поздно столкнётесь с двумя полезными задачами: узнать длину строки и избавиться от лишних пробелов по краям. Для этого существуют методы length() и trim(). В этом уроке разберём оба на практическом примере.
Необходимое оборудование
Схема подключения
Дополнительные компоненты для этого примера не нужны — достаточно самой платы. Подключите её к компьютеру через USB и откройте монитор порта в Arduino IDE.

Схема подключения: плата Arduino UNO без дополнительных компонентов — всё взаимодействие происходит через Serial.
Как это работает
Метод length() возвращает количество символов в объекте Strings. Это удобно, когда нужно проверить, не пустая ли строка, или ограничить ввод пользователя по длине.
Метод trim() убирает пробельные символы (whitespace) с начала и конца строки. К пробельным символам относятся:
- пробел (ASCII 32)
- табуляция (ASCII 9)
- вертикальная табуляция (ASCII 11)
- перевод страницы, form feed (ASCII 12)
- возврат каретки, carriage return (ASCII 13)
- перевод строки, newline (ASCII 10)
Это особенно важно при обработке данных, пришедших через Serial: пользователь мог случайно добавить пробел, а терминал почти всегда добавляет \r\n в конец строки.
Код
trim() незаменим, когда вы знаете, что в строке есть лишние пробельные символы в начале или конце, и хотите их удалить. Пример ниже демонстрирует строку с пробелами до и после вызова trim():
/*
String length() и trim()
Примеры использования length() и trim() со строками типа String
создан 27 июл 2010
изменён 2 апр 2012
автор Tom Igoe
Этот пример кода находится в общественном достоянии.
https://www.arduino.cc/en/Tutorial/StringLengthTrim
*/
void setup() {
// Открываем последовательный порт и ждём его готовности:
Serial.begin(9600);
while (!Serial) {
; // Ожидание подключения к последовательному порту. Нужно только для нативного USB-порта
}
// Отправляем вступление:
Serial.println("\n\nString length() and trim():");
Serial.println();
}
void loop() {
// Строка с пробелами в конце (пробельные символы):
String stringOne = "Hello! ";
Serial.print(stringOne);
Serial.print("<--- end of string. Length: ");
Serial.println(stringOne.length());
// Удаляем пробельные символы из строки:
stringOne.trim();
Serial.print(stringOne);
Serial.print("<--- end of trimmed string. Length: ");
Serial.println(stringOne.length());
// Бесконечный цикл без действий:
while (true);
}
Практические замечания
trim()изменяет саму строку «на месте» — отдельного возвращаемого значения нет. После вызова исходный объект Strings уже не содержит лишних пробелов.length()считает именно символы, а не байты. Для строк на латинице это одно и то же, но помните об этом при работе с многобайтовыми кодировками.- Если вы сравниваете строки командой
==, лишние пробелы могут привести к тому, что"hello" != "hello ". Вызовtrim()перед сравнением решает эту проблему.
Типичные ошибки
- Забыли открыть монитор порта. Скетч работает, но вы ничего не видите — просто откройте Serial Monitor в IDE и убедитесь, что скорость совпадает с той, что указана в
Serial.begin(). - Ожидали, что
trim()удалит пробелы внутри строки. Метод работает только с краями строки; пробелы в середине остаются нетронутыми. - Путают
length()сsizeof().sizeof()возвращает размер в байтах, включая нулевой терминатор, аlength()— реальное количество символов строки без него.
Как проверить результат
Откройте монитор порта после загрузки скетча. Вы увидите строку с пробелами и её длину, а затем — ту же строку после trim() с уже другой длиной. Это наглядно показывает, сколько лишних символов было удалено.
Дополнительные материалы
Больше базовых примеров вы найдёте в разделе built-in examples.
Также можно изучить language reference — подробный справочник по языку программирования Arduino.
Последнее обновление: 11.08.2015, SM