Удаление символов, соответствующих шаблону

Arduino:
Удаление символов, соответствующих шаблону

Как это делать:

Допустим, мы хотим удалить все цифровые символы из нашей строки. У нас есть строка со случайными числами, и мы хотим получить в результате чистую строку, содержащую только буквы.

void setup() {
  Serial.begin(9600);

  // Наша начальная строка с числами
  String stringWithNumbers = "Ar3du1n0 1s aw3som3!";
  String cleanedString = deletePattern(stringWithNumbers, "0123456789");

  // Печатаем очищенную строку
  Serial.println(cleanedString);
}

void loop() {
  // Здесь делать нечего
}

String deletePattern(String str, String pattern) {
  for (unsigned int i = 0; i < pattern.length(); i++) {
    str.replace(String(pattern[i]), "");
  }
  return str;
}

Если вы загрузите и запустите это на вашем Arduino, вы увидите строку без чисел в мониторе последовательного порта:

Arduino is awesome!

Подробнее

Удаление символов, соответствующих определённому шаблону, не является новой концепцией. В ранних языках программирования были функции для обработки и манипуляции строками. В Arduino, хотя функция высокого уровня для удаления по шаблону отсутствует встроенно, мы можем создать нашу собственную логику, как в функции deletePattern выше.

Существуют альтернативы на других языках, такие как регулярные выражения (regex) в Python или JavaScript, но среда программирования Arduino более базовая. Она не включает функции regex из коробки, в основном из-за ограниченной вычислительной мощности и памяти.

Под капотом наша функция deletePattern итерируется через нашу строку шаблона, использует метод String.replace() для поиска текущего символа и заменяет его на пустую строку, таким образом “удаляя” его из нашей исходной строки.

См. также