C#取一个字符串的子串

我只是从文件中取一行,如果那个文件没有特定的模式..而且我想从该行获取最后3个字符…我的代码是:

while (!line.Contains(pattern)) { String num = line.Substring((line.Length - 3), (line.Length - 2)); System.Console.WriteLine(num); } 

但我收到一个错误..

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

为什么我这样做? 我在行结束前开始新的字符串3个字符,然后我停止2个字符..:\

Substring接受一个偏移量,然后返回一些字符:

http://msdn.microsoft.com/en-us/library/aa904308%28v=VS.71%29.aspx

所以:

 String num = line.Substring((line.Length - 3), 3); 

这当然假设line.Length> 3.你可以检查:

 String num = (line.Length < 3) ? line : line.Substring((line.Length - 3), 3); 

Substring第二个参数是从第一个参数开始需要多少个字符。 它应该看起来像这样: String num = line.Substring(line.Length - 3, 3);

这很危险。 如果线的长度<3,该怎么办? 你应该检查一下,否则你会得到一个例外。

另外,您应该使用如下所示的substring方法:

 String num = line.Substring((line.Length - 3), 3); 

问题是你试图获得更多的角色然后你的arrays。

扩展最适合像这样的问题;)我有一些脏名但每个人都知道它会做什么 – 这是exception安全的子串:

 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个字母:)

 String num = line.Substring(line.Length - 3) 

发生这种情况是因为Substring()的最后一个参数应该是要提取的字符串的长度。

在你的情况下它应该是3

,而不是line.Length - 2

第一个参数也应该是:

line.Length - 3