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