我正在寻找一个字符串中的匹配项。如果有的话,我会在第一次出现之前获取子字符串,在匹配之后获取子字符串。
不幸的是,该过程的第二部分是抛出异常。 " 索引和长度必须引用字符串中的位置。参数名称长度"
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
感谢您的帮助。
答案 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);
}
}