Arduino:Примеры/StringIndexOf

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин (Cubewriter) Контакты:</br>* Skype: cubewriter</br>* E-mail: cubewriter@gmail.com</br>* Максим Кузьмин на freelance.ru
Проверка/Оформление/Редактирование: Мякишев Е.А.


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

Строковая функция indexOf() дает возможность искать в строке то или иное значение по принципу «самый первый с начала». В то же время, задав определенный «фильтр», можно искать не только первый, но и второй, третий символ и т.д. Функция lastIndexOf() делает то же самое, но по принципу «самый первый с конца».

String stringOne = "<HTML><HEAD><BODY>";
int firstClosingBracket = stringOne.indexOf('>');

В данном случае значение firstClosingBracket равно 5, поскольку самый первый символ «>», который попадается функции indexOf(), находится именно на пятой позиции (т.е. отсчет идет от 0). Если вам нужно отыскать не первую, а вторую по порядку закрывающую скобку, вам нужно использовать знание о том, где находится первая, а затем воспользоваться построением «firstClosingBracket + 1» – оно будет своего рода «фильтром» для поиска этой второй закрывающей скобки.

stringOne = "<HTML><HEAD><BODY>";
int secondClosingBracket = stringOne.indexOf('>', firstClosingBracket + 1 );

Теперь результатом будет 11 – это позиция второй закрывающей скобки (она закрывает тег «HEAD»). Если вам нужно произвести поиск с конца строки, можно воспользоваться функцией lastIndexOf() – она тоже возвращает позицию заданного символа, но теперь поиск начинается с конца строки.

stringOne = "<HTML><HEAD><BODY>";
int lastOpeningBracket = stringOne.lastIndexOf('<');

В данном случае lastOpeningBracket будет равно 12 – это позиция первого с конца символа «<», т.е. открывающей скобки для тега «BODY». Если вы хотите добраться до открывающей скобки у тега HEAD, в коде нужно будет прописать

stringOne.lastIndexOf('<', lastOpeningBracket -1)

, и эта функция вернет вам значение 6.

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

  • Плата Arduino;

Цепь

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

Arduino bb.png

Код

/*
  Строковые функции indexOf() и lastIndexOf()
 
  Несколько примеров того, как анализировать строки, а также искать и заменять в них определенные символы.
 
 Создан 27 июля 2010, 
 модифицирован 2 апреля 2012 Томом Иго (Tom Igoe)
 
 http://arduino.cc/en/Tutorial/StringIndexOf
 
 Этот код не защищен авторским правом. 
 */

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

  // Отсылаем вступительную часть:
  Serial.println("\n\nString indexOf() and lastIndexOf()  functions:");
  Serial.println();
}

void loop() {
  // Функция indexOf() возвращает самую первую позицию (т.е. индекс) определенного символа, находящегося в строке. 
  // Ее можно использовать, например, при анализе HTML-тегов:
  String stringOne = "<HTML><HEAD><BODY>";
  int firstClosingBracket = stringOne.indexOf('>');
  Serial.println("The index of > in the string " + stringOne + " is " + firstClosingBracket);

  stringOne = "<HTML><HEAD><BODY>";
  int secondOpeningBracket = firstClosingBracket + 1;
  int secondClosingBracket = stringOne.indexOf('>', secondOpeningBracket );
  Serial.println("The index of  the second > in the string " + stringOne + " is " + secondClosingBracket);

  // Кроме того, при помощи indexOf() можно искать и совокупности символов
  // или даже целые строки:
  stringOne = "<HTML><HEAD><BODY>";
  int bodyTag = stringOne.indexOf("<BODY>");
  Serial.println("The index of the body tag in the string " + stringOne + " is " + bodyTag);

  stringOne = "<UL><LI>item<LI>item<LI>item</UL>";
  int firstListItem = stringOne.indexOf("<LI>");
  int secondListItem = stringOne.indexOf("item", firstListItem + 1 );
  Serial.println("The index of the second list item in the string " + stringOne + " is " + secondClosingBracket);

  // Функция lastIndexOf() возвращает самый последний индекс заданного символа, находящегося в строке:
  int lastOpeningBracket = stringOne.lastIndexOf('<');
  Serial.println("The index of the last < in the string " + stringOne + " is " + lastOpeningBracket);

  int lastListItem  = stringOne.lastIndexOf("<LI>");
  Serial.println("The index of the last list item in the string " + stringOne + " is " + lastListItem);


  // при помощи lastIndexOf() тоже можно искать совокупности символов и строки:
  stringOne = "<p>Lorem ipsum dolor sit amet</p><p>Ipsem</p><p>Quod</p>";
  int lastParagraph = stringOne.lastIndexOf("<p");
  int secondLastGraf = stringOne.lastIndexOf("<p", lastParagraph - 1);
  Serial.println("The index of the second last paragraph tag " + stringOne + " is " + secondLastGraf);

  // Пока условие верно, ничего не делаем:
  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

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