index和length必须引用字符串中的位置。参数名称长度

时间:2014-07-04 00:21:32

标签: c# string

我正在寻找一个字符串中的匹配项。如果有的话,我会在第一次出现之前获取子字符串,在匹配之后获取子字符串。

不幸的是,该过程的第二部分是抛出异常。 " 索引和长度必须引用字符串中的位置。参数名称长度"

string str1 = (firstIndex > 0) 
          ? line.Substring(0, firstIndex) : string.Empty;


string str3 = (lastIdx < line.Length - 1) 
    ? line.Substring(lastIdx + 1, line.Length - 1) : string.Empty;// This line
                                                                  //is causing problem

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

Substring的第二个参数是长度。如果你想从lastIdx + 1开始到字符串结尾的子字符串,那么就不要传递lenght参数。使用:

string str3 = (lastIdx < line.Length - 1) 
   ? line.Substring(lastIdx + 1) : string.Empty;

答案 1 :(得分:1)

当您获取子字符串时,您需要指定子字符串的长度,而不是最后一个字符的索引。

而不是

line.Substring(lastIdx + 1, line.Length - 1)

line.Substring(lastIdx + 1, line.Length - (lastIdx + 1))

(或者只是省略@ Selman22建议的第二个参数。)

答案 2 :(得分:0)

来自MSDN,String.Substring Method (Int32)

  

从此实例中检索子字符串。子串从a开始   指定的字符位置并继续到字符串的末尾。

此示例显示了String.Substring()的单参数和双参数版本的使用:

using System;

public class Test
{
    public static void Main()
    {
        var line = "stackoverflow";
        //               ^  ^
        //               a  b

        var firstIndex = 5;  // a
        var lastIndex = 8;   // b

        // Extracts "stack".
        string str1 = (firstIndex > 0)
            ? line.Substring(0, firstIndex) : string.Empty;

        // Extracts "flow".
        string str3 = (lastIndex < line.Length - 1)
            ? line.Substring(lastIndex + 1) : string.Empty;

        Console.WriteLine("first: [{0}]\nlast[{1}]\n", str1, str3);
    }
}