Arduino:Примеры/StringStartsWithEndsWith: различия между версиями

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Нет описания правки
Нет описания правки
 
Строка 21: Строка 21:
Функциями startsWith() и endsWith() можно воспользоваться, например, для того, чтобы узнать, какая последовательность символов идет в самом начале строки или какой символ расположен в самом конце. Кроме того, их можно использовать вместе с '''«фильтром»''', если искомый символ или подстрока находятся на известной нам позиции. Например,
Функциями startsWith() и endsWith() можно воспользоваться, например, для того, чтобы узнать, какая последовательность символов идет в самом начале строки или какой символ расположен в самом конце. Кроме того, их можно использовать вместе с '''«фильтром»''', если искомый символ или подстрока находятся на известной нам позиции. Например,


<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
stringOne = "HTTP/1.1 200 OK";
stringOne = "HTTP/1.1 200 OK";
   if (stringOne.startsWith("200 OK", 9)) {
   if (stringOne.startsWith("200 OK", 9)) {
Строка 30: Строка 30:
Функционально это то же самое, что и...
Функционально это то же самое, что и...


<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
stringOne = "HTTP/1.1 200 OK";
stringOne = "HTTP/1.1 200 OK";
   if (stringOne.substring(9) == "200 OK") {
   if (stringOne.substring(9) == "200 OK") {
Строка 39: Строка 39:
'''Внимание!''' Если вы ищете позицию, находящуюся за пределами строки, то результаты могут быть не такими, как ожидалось. Например, если в примере выше вписать  
'''Внимание!''' Если вы ищете позицию, находящуюся за пределами строки, то результаты могут быть не такими, как ожидалось. Например, если в примере выше вписать  


<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
stringOne.startsWith("200 OK", 16)
stringOne.startsWith("200 OK", 16)
</syntaxhighlight>
</syntaxhighlight>
Строка 45: Строка 45:
, функция будет искать не в самой строке, а в памяти за ее пределами. Поэтому убедитесь, что индекс, который вы указываете в функциях  '''startsWith''' и '''endsWith''' находится в диапазоне между '''0''' и значением, возвращенным функцией length().
, функция будет искать не в самой строке, а в памяти за ее пределами. Поэтому убедитесь, что индекс, который вы указываете в функциях  '''startsWith''' и '''endsWith''' находится в диапазоне между '''0''' и значением, возвращенным функцией length().


<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
/*
/*
   Строковые функции StartsWith и EndsWith
   Строковые функции StartsWith и EndsWith

Текущая версия от 18:20, 14 мая 2023

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Строковые функции StartsWith и EndsWith [1]

Функции startsWith() и endsWith() позволяют проверить, каким символом или подстрокой начинается или заканчивается строка. Являются частным случаем функции substring().

Необходимое оборудование

  • Плата Arduino;

Цепь

Для этого примера никакой цепи выстраивать не нужно, надо просто при помощи USB-соединения подключить друг к другу компьютер и Arduino.

Код

Функциями 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().

/*
  Строковые функции StartsWith и EndsWith
 
  Несколько примеров использования функций startsWith() и endsWith() при работе со строками.
 
  Создан 27 июля 2010,
  модифицирован 2 апреля 2012 Томом Иго (Tom Igoe). 
 
 http://arduino.cc/en/Tutorial/StringStartsWithEndsWith
 
  Этот код не защищен авторским правом.
 */

void setup() {
  // Инициализируем последовательную передачу данных и ждем открытия порта:
  Serial.begin(9600);
  while (!Serial) {
    ; // ждем подключения порта (требуется только для Leonardo)
  }

  // Отсылаем вступительную часть:
  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() можно искать подстроки
  // и в глубине строки, но для этого нужен «фильтр»,
  // т.е. позиция, с которой, как предполагается, начинается искомая подстрока
  // (в данном случае – 9-ая позиция):
  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);
}

См.также

  1. String object
  2. StringConstructors
  3. StringAdditionOperator
  4. StringIndexOf
  5. StringAppendOperator
  6. StringLengthTrim
  7. StringCaseChanges
  8. StringReplace
  9. StringCharacters
  10. StringStartsWithEndsWith
  11. StringComparisonOperators
  12. StringSubstring

Внешние ссылки