← Все вопросы

Как найти позицию подстроки или проверить вхождение в строку C#?

Задан 19 месяцев назад123 просмотров2 ответа
6

Мне нужно понять, есть ли в строке определённое слово, и если есть — узнать, с какой позиции оно начинается. Какие методы для этого есть в C#? Ещё видел CompareTo — это для того же самого или для другого?

2 ответа

13
✓ Принятый ответ — помог автору

Для поиска позиции есть IndexOf — он возвращает индекс первого вхождения или -1, если не найдено:

string s = "привет мир, привет всем";

int pos = s.IndexOf("привет");      // 0
int last = s.LastIndexOf("привет"); // 11 (последнее вхождение)
int notFound = s.IndexOf("пока");   // -1

Если нужно просто проверить наличие (без позиции) — удобнее Contains:

if (s.Contains("мир"))
    Console.WriteLine("нашли");

Для поиска без учёта регистра:

int i = s.IndexOf("ПРИВЕТ", StringComparison.OrdinalIgnoreCase);

Теперь про CompareTo — это совсем другое. Он не ищет подстроку, а сравнивает две строки лексикографически (для сортировки) и возвращает -1, 0 или 1:

int cmp = "apple".CompareTo("banana"); // отрицательное: apple раньше

Итого: IndexOf/Contains — поиск внутри строки, CompareTo — сравнение/сортировка строк.

4

Дополню: для проверки начала и конца строки есть отдельные удобные методы, чтобы не возиться с IndexOf:

string file = "report.pdf";
bool isPdf = file.EndsWith(".pdf");      // true
bool isImg = file.StartsWith("img_");    // false

Читается яснее, чем сравнивать результат IndexOf с нулём.

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект