索引和长度必须指向字符串中的位置.参数名称长度
本文关键字:位置 参数 索引 字符串 | 更新日期: 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);
}
}