C#取一个字符串的子串

时间:2011-11-11 17:22:44

标签: c# string substring

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

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

但是我收到了错误..

  

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

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

6 个答案:

答案 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