← Все вопросы

Как вырезать часть строки в C# через Substring?

Задан 11 месяцев назад407 просмотров2 ответа
7

Есть строка, например дата "2026-06-18", и мне нужно достать из неё отдельно год, месяц, день. Слышал про Substring, но путаюсь в аргументах — там индекс и длина или два индекса? Постоянно получаю ArgumentOutOfRangeException.

2 ответа

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

Substring принимает начальный индекс и (опционально) количество символов — НЕ два индекса. Индексы с нуля.

string date = "2026-06-18";

string year  = date.Substring(0, 4); // с позиции 0, 4 символа -> "2026"
string month = date.Substring(5, 2); // с позиции 5, 2 символа -> "06"
string day   = date.Substring(8);    // с позиции 8 и до конца -> "18"

Если передать один аргумент — берётся всё от индекса до конца строки.

Почему вы ловите ArgumentOutOfRangeException: это происходит, когда начало + длина выходит за пределы строки. Например, date.Substring(8, 5) упадёт, потому что после позиции 8 нет 5 символов.

Для вашей задачи с датой, кстати, проще Split:

string[] parts = date.Split('-');
string year = parts[0], month = parts[1], day = parts[2];

А в современном C# (8+) ещё есть удобный синтаксис диапазонов:

string year = date[..4];   // первые 4 символа
string day  = date[8..];   // с 8-го до конца
4

Чтобы не падать с ArgumentOutOfRangeException, всегда проверяйте длину перед вызовом или используйте безопасный подход:

string s = "abc";
string part = s.Length >= 5 ? s.Substring(0, 5) : s;

И помните: первый аргумент Substring — это позиция (с нуля), второй — именно длина, а не конечный индекс. Эту вторую цифру путают чаще всего.

Ваш ответ

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