VirQ. Поиск позиции подстроки в строке в C#
Язык C# входит в ТОП-5
самых популярных языков
программирования
Главная / Строковые переменные /
Поиск позиции подстроки в строке
Статей на сайте: 61

Поиск позиции подстроки в строке


У фукнции IndexOf имеется 9 перегрузок (9 различных вариантов приёма переменных). Мы рассмотрим только 3 основных.
Сама функция IndexOf занимается поиском символа или подстроки в строке.
Для примера мы будем использовать следующий текст:

"Успех – это умение двигаться от одной неудачи к другой, не теряя при этом энтузиазма"

Функция IndexOf с 1 параметром.
1 значение - искомая подстрока
[code] string s = "Успех – это умение двигаться от одной неудачи к другой, не теряя при этом энтузиазма"; int n = s.IndexOf("не теряя"); //Здесь вы получите число 56 ('не теряя' найдено на 56 позиции) [/code]
Таким образом мы узнали, что текст "не теряя" находится на 56 позиции текста (если считать, как мы привыкли, то на 57). На самом деле компьютер считает от 0, при этом учитывает все пробелы и знаки препинания.
Если подстрока не найдена, вы получите -1
[code] string s = "Успех – это умение двигаться от одной неудачи к другой, не теряя при этом энтузиазма"; int n = s.IndexOf("автобус"); //Здесь вы получите число -1 [/code]
В данном тексте нет слова "автобус", поэтому результат будет равен -1.

Функция IndexOf с 2 параметрами.
1 значение - искомая подстрока
2 значение - позиция, ОТКУДА начать искать (приведём несколько примеров):
[code] string s = "Успех – это умение двигаться от одной неудачи к другой, не теряя при этом энтузиазма"; int n = s.IndexOf("умение", 0); //Здесь вы получите число 12. То же самое, что и int n = s.IndexOf("умение"); int m = s.IndexOf("умение", 7); //Здесь вы получите число 12 int p = s.IndexOf("умение", 12); //Здесь вы получите число 12 int q = s.IndexOf("умение", 20); //Здесь вы получите число -1 [/code]

Функция IndexOf с 3 параметрами.
1 значение - искомая подстрока
2 значение - позиция, откуда начать искать
3 значение - длина строки, в которой будет вестись поиск (при этом искомое слово должно полностью войти в заданный промежуток основной строки)
[code] string s = "Успех – это умение двигаться от одной неудачи к другой, не теряя при этом энтузиазма"; int m = s.IndexOf("двигаться", 15, 2); //Здесь вы получите число -1 int p = s.IndexOf("двигаться", 15, 10); //Здесь вы получите число -1 int q = s.IndexOf("двигаться", 15, 20); //Здесь вы получите число 19 [/code]
Распишем по-другому:
[code] int m = s.IndexOf("двигаться", 15, 2); //Ищем 'двигаться' в 'ни' int p = s.IndexOf("двигаться", 15, 10); //Ищем 'двигаться' в 'ние двигат' int q = s.IndexOf("двигаться", 15, 20); //Ищем 'двигаться' в 'ние двигаться от одн' [/code]
Случай довольно-таки редкий, что такое может где-то пригодиться. Но при длительной работе в профессии программиста когда-нибудь, возможно, придётся столкнуться даже с таким набором параметров данного метода.

IndexOf находит всегда первый элемент, не считая остальные. Например:
[code] string s = "Успех – это умение двигаться от одной неудачи к другой, не теряя при этом энтузиазма"; int n = s.IndexOf("е"); //Здесь вы получите число 3 int n = s.IndexOf("е", 5); //Здесь вы получите число 14 (перескочили 1-ю букву 'e' и попали на следующую [/code]
Во втором случае это был поиск, начиная с 5-го символа.

Функция LastIndexOf делает то же самое и имеет такой же смысловой набор параметров, только ищет самую последнюю встретившуюся букву или слово
[code] int m = s.LastIndexOf("н"); //Получите 75 [/code]
Это последняя встретившаяся буква "н" в тексте. Эта буква располагается в слове "энтузиазма".
Так же, если какая-то буква или слово не найдено, функция LastIndexOf вернёт значение -1.

Слово не обязательно набирать целиком (и не обязательно с начала самого слова и до его конца):
[code] string s = "Успех – это умение двигаться от одной неудачи к другой, не теряя при этом энтузиазма"; int n = s.LastIndexOf("тузиа"); //Здесь вы получите число 76 [/code]

Методы IndexOf и LastIndexOf могут принимать не только непосредственно слово, но и другую переменную:
[code] string s = "Успех – это умение двигаться от одной неудачи к другой, не теряя при этом энтузиазма"; string t = "тузиа"; int n = s.LastIndexOf(t); //Здесь вы так же получите число 76 [/code]


Дополнительная информация о том, как вывести результат в консоли или WinForm