我正在从文件中取一行,如果该文件没有特定的模式..我想从该行获取最后3个字符...我的代码是:
while (!line.Contains(pattern))
{
String num = line.Substring((line.Length - 3), (line.Length - 2));
System.Console.WriteLine(num);
}
但是我收到了错误..
索引和长度必须指向字符串中的位置。 参数名称:长度
为什么我这样做?我在行结束前开始新的字符串3个字符,然后在...之前停止2个字符:\
答案 0 :(得分:7)
Substring接受一个偏移量,然后返回一些字符:
http://msdn.microsoft.com/en-us/library/aa904308%28v=VS.71%29.aspx
所以:
String num = line.Substring((line.Length - 3), 3);
这当然假设line.Length>你可以查看:
String num = (line.Length < 3) ? line : line.Substring((line.Length - 3), 3);
答案 1 :(得分:2)
Substring
的第二个参数是从第一个参数开始需要多少个字符。它应该看起来像这样:
String num = line.Substring(line.Length - 3, 3);
答案 2 :(得分:1)
这很危险。如果线的长度<1,该怎么办? 3?你应该检查一下,否则你会得到一个例外。
此外,您应该使用描述为here:
的子字符串方法String num = line.Substring((line.Length - 3), 3);
答案 3 :(得分:1)
问题是你试图获得更多的角色然后你的阵列。
扩展最适合像这样的问题;)我有一些脏名但每个人都知道它会做什么 - 这是异常安全的子串:
public static string SubstringNoLongerThenSource(this string source, int startIndex, int maxLength)
{
return source.Substring(startIndex, Math.Min(source.Length - startIndex, maxLength));
}
所以在您确切的问题中应该是这样的:
String num = line.SubstringNoLongerThenSource((line.Length - 3), 3);
System.Console.WriteLine(num);
如果你提供给函数的字符串有足够的字母,那么 num 将有最多3个字母:)
答案 4 :(得分:0)
String num = line.Substring(line.Length - 3)
答案 5 :(得分:-1)
这是因为Substring()的最后一个参数应该是要提取的字符串的长度。
在你的情况下它应该是3
,而不是line.Length - 2
第一个参数也应该是:
line.Length - 3