转换数字字符串时编译错误

时间:2016-02-26 07:28:43

标签: c# arrays visual-studio generics

在我的代码中,我得到了很多以空格分隔的数字。所以例如我得到318个数字,我需要把它们放在一个数组中。 所以我这样做了:

int[] alleNummers = Array.ConvertAll(Console.ReadLine().Split(new[] { ' ' }), int.Parse);

但是当我填写这段数字时:

4 1 3 3 4 6 10 1 1 8 7 1 8 6 11 9 2 6 9 1 8 2 12 9 12 1 3 1 6 8 6 10 9 9 1 1 2 11 2 2 6 8 3 1 1 2 10 3 7 6 3 3 7 2 11 7 2 2 7 8 10 1 6 6 9 7 7 11 5 8 1 10 3 3 11 4 4 8 6 11 2 8 1 9 10 12 3 12 1 10 8 11 11 1 4 8 7 10 6 11 6 7 9 8 10 8 11 1 4 5 12 5 1 1 1 10 12 4 10 1 2 5 11 12 6 3 7 1 1 1 12 6 7 9 2 4 4 12 5 7 5 5 12 5 5 12 3 5 4 12 5 5 5 4 4 10 7 11 10 7 12 10 1 7 6 2 11 10 2 4 4 6 8 4 11 1 3 1 5 7 1 9 11 5 1 3 3 7 2 1 1 1 10 1 8 3 3 6 12 4 10 4 9 5 7 8 6 10 8 10 4 9 7 3 1 7 6 4 1 7 4 2 8 1 3 3 4 5 9 4 9 6 8 6 11 2 1 4 12 9 1 4 5 8 7 6 2 12 9 3 6 12 5 1 1 8 4 4 1 12 8 9 6 3 2 5 5 3 8 4 11 9 8 3 4 2 8 6 2 5 9 7 4 1 8 5 9 12 8 9 12 3 6 5 6 8 9 10 10 5 2 8 1 9 10 5 11 6 10 12 10 6 7 2 7 2 6 3. 

我得到了system.formatexception: Input string was not in a correct format. 我环顾了互联网,看到我需要将代码更改为:

int[] alleNummers = Array.ConvertAll(Console.ReadLine().Split(new[] { ' ' },StringSplitOptions.RemoveEmptyEntries), int.Parse);

但是现在我没有得到所有数字,我不知道为什么会发生这种情况。当我填写上述数字时,alleNummers.Count给我115而不是318。

我想知道为什么会这样,以及如何将这些数字放入数组或任何collections.generic class中。

1 个答案:

答案 0 :(得分:2)

由于dustmouse已经指出你可以输入控制台的最大字符长度为256.所以实际输入的内容如下:

4 1 3 3 4 6 10 1 1 8 7 1 8 6 11 9 2 6 9 1 8 2 12 9 12 1 3 1 6 8 6 10 9 9 1 1 2 11 2 2 6 8 3 1 1 2 10 3 7 6 3 3 7 2 11 7 2 2 7 8 10 1 6 6 9 7 7 11 5 8 1 10 3 3 11 4 4 8 6 11 2 8 1 9 10 12 3 12 1 10 8 11 11 1 4 8 7 10 6 11 6 7 9 8 10 8 11 1 4 5 12 5 1 1 1 

这是输入字符串中的前256个字符(注意尾随空格)。由于最后一个字符是空格,因此您将获得FormatException,因为String.Split将返回115个数组元素,包括最后一个空元素,无法转换为int。这也是String.Split设置StringSplitOptions.RemoveEmptyEntries的原因,因为它只是省略了要转换为int的数组中的空元素。

只要您使用控制台输入所有这些数字,就会遇到这种字符限制。但是,您可以从文件或任何其他类型的流中读取此输入:

string text = File.ReadAllText(fileName));
int[] alleNummers = Array.ConvertAll(text.Split(new[] { ' ' }), int.Parse);