将字符串数组转换为int数组'System.FormatException'

时间:2014-11-23 14:48:14

标签: c# arrays string int

我尝试将data1字符串数组转换为int数组结束可能还有其他一些解决方案可用于此任务,但如果可能的话我想让它工作。

问题是,当我开始问题时,它停止并向我提出以下问题:"未处理的类型' System.FormatException'发生在mscorlib.dll" 我也用int.parse相同的问题进行了研究。

static int[] data()
            {
                StreamReader house = new StreamReader("text.txt");
                while (!house.EndOfStream)
                {
                    s = house.ReadLine();
                    Console.WriteLine(s);
                }
                string[] data1 = s.Split(' ');
                int[] database = new int[(data1.Length)];
                for (int j = 0; j < data1.Length; j++)
                {
                    database[j] = Convert.ToInt32(data1[j]);//Program stops here
                }
                return database;
            }

text.txt看起来像这样(用空格分隔的数字&#34;&#34;):

6 1 1
10 5 10
20 10 20
35 5 15
45 5 5 
60 10 25 
75 5 10 

感谢您的帮助!

3 个答案:

答案 0 :(得分:2)

可能是一个空字符串进入你的分裂字符串数组。

在进行拆分时尝试定义StringSplitOptions

 string[] data1 = s.Split(' ', StringSplitOptions.RemoveEmptyEntries);

您还可以检查循环中的空字符串:

for (int j = 0; j < data1.Length; j++)
{
     if (string.IsNullOrWhitespace(data1[j])
         continue;
     database[j] = Convert.ToInt32(data1[j]);//Program stops here
}

答案 1 :(得分:0)

您可以使用Int32.TryParse。 但是如果转换失败,则表示数组项超出预期。因此,最好使用List。而且,您只对文件的最后一行执行转换。 '{'错误。最后但并非最不重要的,你应该Disponse()流阅读器对象。

            static int[] data()
            {
                List<int> database = new List<int>();
                StreamReader house = new StreamReader("text.txt");
                while (!house.EndOfStream)
                {
                    s = house.ReadLine();
                    Console.WriteLine(s);

                    string[] data1 = s.Split(' ');
                    for (int j = 0; j < data1.Length; j++)
                    {    
                        int value;
                        if (Int32.TryParse(data1[j], out value))
                            database.Add(value));
                    }       
                }
                house.Dispose();
                return database.ToArray();
            }

答案 2 :(得分:-2)

您是否尝试过int Integer.parseInt(string)

database[j] = Integer.parseInt(data1[j]);//Program stops here

另外,我会仔细检查那些切碎的字符串的内容是什么(例如,有一个新行字符悄悄进入,最后一行空白......),所以显示它们被另一个字符包围,如& #34;或[] ......