Си шарп как написать поиск по тексту
Перейти к содержимому

Си шарп как написать поиск по тексту

  • автор:

Урок 22. Функции поиска в строках C#

Двадцать вторая часть учебника по основам C# завершает начальное изучение функций манипулирования строками, предоставляемых классом String. В статье рассматриваются методы, доступные для исследования содержимого строк.

Часто необходимо узнать длину строки, например, для проверки ввода пользователя. Класс String предоставляет свойство Length, которое дает нам эту информацию. Свойство возвращает целое число, представляющее количество символов.

Примечание: свойство Length выполняется довольно быстро. При проверке строки на пустоту более эффективно проверять нулевую длину, чем сравнивать строковое значение со String.Empty или»».

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

На одном из предыдущих уроков мы рассмотрели метод Substring, который позволяет извлекать символы из заданной позиции в строке. Обратное ему — указать ряд символов и определить позицию, в которой подстрока появляется в строке. Это может быть достигнуто с помощью методов IndexOf и LastIndexOf.

IndexOf принимает параметр, содержащий подстроку для поиска. Если она существует в основной строке, возвращается позиция первого вхождения. Эта позиция называется указателем: целое число, указывающее количество символов между началом строки и найденным текстом. Для начала строки этот индекс равен нулю. Если подстрока не находится в основной строке, метод возвращает -1.

LastIndexOf похож на IndexOf. Однако вместо возврата индекса первого вхождения поискового термина LastIndexOf возвращает позицию последнего вхождения.

Указание границ поиска

IndexOf и LastIndexOf могут быть ограничены с указанием начальной позицию для поиска. С IndexOf можно найти только вхождения указанной подстроки справа или справа от этой позиции. При использовании LastIndexOf находятся только соответствующие подстроки слева от этой позиции.

Поиск может быть ограничен третьим параметром. Этот параметр представляет собой целое число, указывающее максимальное количество символов, которые могут быть рассмотрены. Если совпадение не существует в диапазоне символов, то результат будет равен -1.

Простые проверки на содержание

IndexOf и LastIndexOf полезны при определении точного положения подстрок в строках. Однако, иногда достаточно просто знать, что там имеется такая подстрока. Класс String предоставляет несколько методов для выполнения этих тестов.

StartsWith и EndsWith

StartsWith и EndsWith позволяют определить, начинается или заканчивается строка определенной серией символов. Оба метода принимают аргумент, содержащий строку для поиска соответствия, а возвращают логическое значени. Эти методы учитывают регистр.

Contains метод из .NET 2.0

Последняя строковая функция, ркоторую мы рассмотрим на сегодняшнем уроке – это Contains. Введенный в версии 2.0 .NET framework, он работает аналогично StartsWith и EndsWith, но проверяет, существует ли указанный поисковый символ в любой позиции в основной строке.


Автор этого материала — я — Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML — то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегистатьи IT, Уроки по си шарп, string, си шарп,, поиск позиции в строке

Find text in string with C#

How can I find given text within a string? After that, I’d like to create a new string between that and something else. For instance, if the string was:

And I want to create a string with whatever is between «my » and » is» how could I do that? This is pretty pseudo, but hopefully it makes sense.

dakab's user avatar

17 Answers 17

Use this method:

This is the simplest way:

Kemal Duran's user avatar

You could use Regex:

Here’s my function using Oscar Jara’s function as a model.

This version does at most two searches of the text. It avoids an exception thrown by Oscar’s version when searching for an end string that only occurs before the start string, i.e., getBetween(text, «my», «and»); .

Usage is the same:

You can do it compactly like this:

Except for @Prashant’s answer, the above answers have been answered incorrectly. Where is the «replace» feature of the answer? The OP asked, «After that, I’d like to create a new string between that and something else».

Based on @Oscar’s excellent response, I have expanded his function to be a «Search And Replace» function in one.

I think @Prashant’s answer should have been the accepted answer by the OP, as it does a replace.

Си шарп как написать поиск по тексту

Конкатенация строк или объединение может производиться как с помощью операции + , так и с помощью метода Concat :

Метод Concat является статическим методом класса string, принимающим в качестве параметров две строки. Также имеются другие версии метода, принимающие другое количество параметров.

Для объединения строк также может использоваться метод Join :

Метод Join также является статическим. Использованная выше версия метода получает два параметра: строку-разделитель (в данном случае пробел) и массив строк, которые будут соединяться и разделяться разделителем.

Сравнение строк

Для сравнения строк применяется статический метод Compare :

Данная версия метода Compare принимает две строки и возвращает число. Если первая строка по алфавиту стоит выше второй, то возвращается число меньше нуля. В противном случае возвращается число больше нуля. И третий случай — если строки равны, то возвращается число 0.

В данном случае так как символ h по алфавиту стоит выше символа w, то и первая строка будет стоять выше.

Поиск в строке

С помощью метода IndexOf мы можем определить индекс первого вхождения отдельного символа или подстроки в строке:

Подобным образом действует метод LastIndexOf , только находит индекс последнего вхождения символа или подстроки в строку.

Еще одна группа методов позволяет узнать начинается или заканчивается ли строка на определенную подстроку. Для этого предназначены методы StartsWith и EndsWith . Например, в массиве строк хранится список файлов, и нам надо вывести все файлы с расширением exe:

Разделение строк

С помощью функции Split мы можем разделить строку на массив подстрок. В качестве параметра функция Split принимает массив символов или строк, которые и будут служить разделителями. Например, подсчитаем количество слов в сроке, разделив ее по пробельным символам:

Это не лучший способ разделения по пробелам, так как во входной строке у нас могло бы быть несколько подряд идущих пробелов и в итоговый массив также бы попадали пробелы, поэтому лучше использовать другую версию метода:

Второй параметр StringSplitOptions.RemoveEmptyEntries говорит, что надо удалить все пустые подстроки.

Обрезка строки

Для обрезки начальных или концевых символов используется функция Trim :

Функция Trim без параметров обрезает начальные и конечные пробелы и возвращает обрезанную строку. Чтобы явным образом указать, какие начальные и конечные символы следует обрезать, мы можем передать в функцию массив этих символов.

Эта функция имеет частичные аналоги: функция TrimStart обрезает начальные символы, а функция TrimEnd обрезает конечные символы.

Обрезать определенную часть строки позволяет функция Substring :

Функция Substring также возвращает обрезанную строку. В качестве параметра первая использованная версия применяет индекс, начиная с которого надо обрезать строку. Вторая версия применяет два параметра — индекс начала обрезки и длину вырезаемой части строки.

Вставка

Для вставки одной строки в другую применяется функция Insert :

Первым параметром в функции Insert является индекс, по которому надо вставлять подстроку, а второй параметр — собственно подстрока.

Удаление строк

Удалить часть строки помогает метод Remove :

Первая версия метода Remove принимает индекс в строке, начиная с которого надо удалить все символы. Вторая версия принимает еще один параметр — сколько символов надо удалить.

Замена

Чтобы заменить один символ или подстроку на другую, применяется метод Replace :

Во втором случае применения функции Replace строка из одного символа «о» заменяется на пустую строку, то есть фактически удаляется из текста. Подобным способом легко удалять какой-то определенный текст в строках.

Смена регистра

Для приведения строки к верхнему и нижнему регистру используются соответственно функции ToUpper() и ToLower() :

Си шарп как написать поиск по тексту

StartsWith и EndsWith


Автор этого материала — я — Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML — то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегистатьи IT, Уроки по си шарп, string, си шарп,, поиск позиции в строке

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *