Cat hungry.png
Здравствуйте! Собираем деньги на перевод материалов по электронике(https://www.allaboutcircuits.com/education/). Реквизиты указаны здесь.

Arduino:Примеры/StringIndexOf

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

Перевод: Максим Кузьмин (Cubewriter)
Перевел 2686 статей для сайта.

Контакты:

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


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

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

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

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

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

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

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

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

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

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

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

  • Плата Arduino;

Цепь

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

Arduino bb.png

Код

  1. /*
  2.   Строковые функции indexOf() и lastIndexOf()
  3.  
  4.   Несколько примеров того, как анализировать строки, а также искать и заменять в них определенные символы.
  5.  
  6.  Создан 27 июля 2010,
  7.  модифицирован 2 апреля 2012 Томом Иго (Tom Igoe)
  8.  
  9.  http://arduino.cc/en/Tutorial/StringIndexOf
  10.  
  11.  Этот код не защищен авторским правом.
  12.  */
  13.  
  14. void setup() {
  15.   // Инициализируем последовательную передачу данных и ждем открытия порта:
  16.   Serial.begin(9600);
  17.   while (!Serial) {
  18.     ; // ждем подключения последовательного порта (нужно только для Leonardo)
  19.   }
  20.  
  21.   // Отсылаем вступительную часть:
  22.   Serial.println("\n\nString indexOf() and lastIndexOf()  functions:");
  23.   Serial.println();
  24. }
  25.  
  26. void loop() {
  27.   // Функция indexOf() возвращает самую первую позицию (т.е. индекс) определенного символа, находящегося в строке.
  28.   // Ее можно использовать, например, при анализе HTML-тегов:
  29.   String stringOne = "<HTML><HEAD><BODY>";
  30.   int firstClosingBracket = stringOne.indexOf('>');
  31.   Serial.println("The index of > in the string " + stringOne + " is " + firstClosingBracket);
  32.  
  33.   stringOne = "<HTML><HEAD><BODY>";
  34.   int secondOpeningBracket = firstClosingBracket + 1;
  35.   int secondClosingBracket = stringOne.indexOf('>', secondOpeningBracket );
  36.   Serial.println("The index of  the second > in the string " + stringOne + " is " + secondClosingBracket);
  37.  
  38.   // Кроме того, при помощи indexOf() можно искать и совокупности символов
  39.   // или даже целые строки:
  40.   stringOne = "<HTML><HEAD><BODY>";
  41.   int bodyTag = stringOne.indexOf("<BODY>");
  42.   Serial.println("The index of the body tag in the string " + stringOne + " is " + bodyTag);
  43.  
  44.   stringOne = "<UL><LI>item<LI>item<LI>item</UL>";
  45.   int firstListItem = stringOne.indexOf("<LI>");
  46.   int secondListItem = stringOne.indexOf("item", firstListItem + 1 );
  47.   Serial.println("The index of the second list item in the string " + stringOne + " is " + secondClosingBracket);
  48.  
  49.   // Функция lastIndexOf() возвращает самый последний индекс заданного символа, находящегося в строке:
  50.   int lastOpeningBracket = stringOne.lastIndexOf('<');
  51.   Serial.println("The index of the last < in the string " + stringOne + " is " + lastOpeningBracket);
  52.  
  53.   int lastListItem  = stringOne.lastIndexOf("<LI>");
  54.   Serial.println("The index of the last list item in the string " + stringOne + " is " + lastListItem);
  55.  
  56.  
  57.   // при помощи lastIndexOf() тоже можно искать совокупности символов и строки:
  58.   stringOne = "<p>Lorem ipsum dolor sit amet</p><p>Ipsem</p><p>Quod</p>";
  59.   int lastParagraph = stringOne.lastIndexOf("<p");
  60.   int secondLastGraf = stringOne.lastIndexOf("<p", lastParagraph - 1);
  61.   Serial.println("The index of the second last paragraph tag " + stringOne + " is " + secondLastGraf);
  62.  
  63.   // Пока условие верно, ничего не делаем:
  64.   while(true);
  65. }

См.также

  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

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

  1. String indexOf() and lastIndexOf()Method