C # взять подстроку строки - PullRequest
3 голосов
/ 11 ноября 2011

Я беру строку из файла, только если этот файл не имеет определенного шаблона ... и я хочу взять из этой строки последние 3 символа ... мой код:

        while (!line.Contains(pattern))
        {
             String num = line.Substring((line.Length - 3), (line.Length - 2));
             System.Console.WriteLine(num);
        }

но я получаю сообщение об ошибке.

Индекс и длина должны указывать на местоположение в строке.Имя параметра: длина

почему я это понимаю?я начинаю новую строку за 3 символа до конца строки и останавливаю за 2 символа до ..: \

Ответы [ 6 ]

7 голосов
/ 11 ноября 2011

Подстрока принимает смещение, а затем количество возвращаемых символов:

http://msdn.microsoft.com/en-us/library/aa904308%28v=VS.71%29.aspx

Итак:

String num = line.Substring((line.Length - 3), 3);

Это, конечно, предполагает эту строку. Длина> 3. Вы можете проверить с помощью:

String num = (line.Length < 3) ? line : line.Substring((line.Length - 3), 3);
2 голосов
/ 11 ноября 2011

Второй аргумент Substring - это количество символов, которое нужно взять, начиная с первого аргумента. Это должно выглядеть так: String num = line.Substring(line.Length - 3, 3);

1 голос
/ 07 июня 2015

Проблема в том, что вы пытаетесь получить больше символов, чем в вашем массиве.

Расширения лучше всего подходят для таких задач, как эта;) У моего имени есть какое-то грязное имя, но все знают, что оно будет делать - это безопасная подстрока:

public static string SubstringNoLongerThenSource(this string source, int startIndex, int maxLength)
{
    return source.Substring(startIndex, Math.Min(source.Length - startIndex, maxLength));
}

Так что в вашей точной проблеме это должно быть так:

String num = line.SubstringNoLongerThenSource((line.Length - 3), 3);
System.Console.WriteLine(num);

Так что num будет иметь максимум 3 буквы, если в строке, которую вы предоставляете для функции, достаточно букв:)

1 голос
/ 11 ноября 2011

Это опасно.Что если длина линии <3?Возможно, вам следует проверить это, иначе вы получите исключение. </p>

Кроме того, вы должны использовать метод подстроки, как показано здесь :

String num = line.Substring((line.Length - 3), 3);
0 голосов
/ 11 ноября 2011
String num = line.Substring(line.Length - 3)
0 голосов
/ 11 ноября 2011

Это происходит потому, что последний параметр Substring () должен быть длиной извлекаемой строки.

В вашем случае это должно быть 3

, а не line.Length - 2

Первый параметр также должен быть:

line.Length - 3

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...