我真的很难过为什么我会遇到异常。这是我在一起展示的SSCCE:
static void Main(string[] args)
{
string tmp =
"Child of: View Available Networks (197314), Title: N/A (66244)";
Console.WriteLine(tmp);
int one = tmp.LastIndexOf('('), two = tmp.LastIndexOf(')');
//my own error checking
Console.WriteLine(tmp.Length);//returns 63
Console.WriteLine(one < 0);//returns false
Console.WriteLine(two > tmp.Length);//returns false
Console.WriteLine(one);//returns 56
Console.WriteLine(two);//returns 62
/*
* error occurs here.
* ArgumentOutOfRangeException Index and length must refer to
* a location within the string.
* Parameter name: length
*/
string intptr = tmp.Substring(one, two);
Console.WriteLine(intptr);
}
我看不出我做错了什么(尽管来自Java背景可能很简单),希望其他人可以。
答案 0 :(得分:5)
substring
s第二个参数是您要提取的字符串的长度,而不是字符串中的位置。
你可以做到
string intptr = tmp.Substring(one + 1, two - one - 1);
答案 1 :(得分:2)
您的代码
tmp.Substring(one, two);
应该是
tmp.Substring(one, (two-one+1));
第二个参数是您想要的子字符串的长度,而我认为您正在使用它,就像它是结束索引一样。 因为我喜欢LINQ,所以也可以这样做:
string.Join(string.Empty, s.Skip(5).Take(7 - 5 + 1)); //build a string from IEnumerable<char>
答案 2 :(得分:1)
string.Substring(startIndex, count ) 你写了startIndex和finishIndex,这是错误的