Главная chevron_right Уроки chevron_right Встроенные примеры chevron_right Строки chevron_right Команды String length() и trim()

Команды 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