将字符串数组转换为整数数组

时间:2014-11-03 23:50:43

标签: c# .net arrays string linq

我正在使用C#.Net v3.5 express 2010阅读包含格式为

的整数的文本文件
18 11 2 18 3 14 1 0 1 3 22 15 0 6 8 23 18 1 3 4 10 15 24 17 17 16 18 10 17 18 23 17 11 19 

通过

string[] code = System.IO.File.ReadAllLines(@"C:\randoms\randnum.txt");

然后我把它放到一个字符串中

string s1 = Convert.ToString(code);

并且需要能够将其读入int数组以进行一些数学处理。

我已尝试过本网站上其他帖子中提出的所有内容,包括解析和隐藏数组但是一旦我尝试了这个,我就会得到可怕的"输入字符串格式不正确&#34 ;消息

5 个答案:

答案 0 :(得分:2)

var intArray =  File.ReadAllText(@"C:\randoms\randnum.txt")
        .Split((char[]) null, StringSplitOptions.RemoveEmptyEntries)
        .Select(int.Parse).ToArray();

答案 1 :(得分:2)

你可以使用LINQ:

var ints = code.SelectMany(s => s.Split(' ')).Select(int.Parse).ToList();

这将获取以空格分隔的数字列表并将它们展平为一维的整体列表

答案 2 :(得分:2)

其中一些答案很棒,但如果您的文件包含任何无法转换为int的字符串,int.Parse()将抛出异常。

虽然稍贵一些,但考虑改为使用TryParse。这为您提供了一些异常处理:

int tmp = 0; // Used to hold the int if TryParse succeeds

int[] intsFromFile = System.IO.File
        .ReadAllText(@"C:\randoms\randnum.txt")
        .Split(null)
        .Where(i => int.TryParse(i, out tmp))
        .Select(i => tmp)
        .ToArray();

答案 3 :(得分:0)

真的,这是一个单行程。这将为您提供文件中的一维整数数组:

private static rxInteger rxInteger = new Regex(@"-?\d+") ;

...

int[] myIntegers1 = rxInteger
                    .Matches( File.ReadAllText(@"C:\foo\bar\bazbat") )
                    .Cast<Match>()
                    .Select( m => int.Parse(m.Value) )
                    .ToArray()
                    ;

如果你想让它成为一个二维的粗糙阵列,它就不那么复杂了:

int[][] myIntegers2 = File
                      .ReadAllLines( @"C:\foo\bar\bazbat" )
                      .Select( s =>
                        rxInteger
                        .Matches(s)
                        .Cast<Match>()
                        .Select( m => int.Parse(m.Value) )
                        .ToArray()
                      )
                      .ToArray()
                      ;

[验证和错误处理的实现留给读者练习]

答案 4 :(得分:-1)

乍一看,问题是您使用ReadAllLines正在阅读数字。这将返回一个字符串数组,其中每个字符串代表文件中的一行。在您的示例中,您的数字似乎都在一行上。您可以使用System.IO.File.ReadAllText来获取单个字符串。然后使用.Split(new char[]{}, StringSplitOptions.RemoveEmptyEntries);获取您要查找的字符串数组。

string allTheText = System.IO.File.ReadAllText(@"C:\randoms\randnum.txt");
string[] numbers = allTheText.Split(new char[]{}, StringSplitOptions.RemoveEmptyEntries);