索引和长度必须指向字符串中的位置.参数名称长度

本文关键字:位置 参数 索引 字符串 | 更新日期: 2023-09-27 18:11:35

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

不幸的是,该过程的第二部分抛出了一个异常。index和length必须指向字符串中的位置。参数名称长度"
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

谢谢你的帮助。

索引和长度必须指向字符串中的位置.参数名称长度

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

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

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

不是

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

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

(或者像@Selman22建议的那样省略第二个参数)

From MSDN, String。子字符串方法(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);
    }
}