【问题标题】:Convert string array to int array 'System.FormatException'将字符串数组转换为 int 数组 'System.FormatException'
【发布时间】:2014-11-23 14:48:14
【问题描述】:

我尝试将 data1 字符串数组转换为 int 数组结尾,也许这个任务还有其他解决方案,但如果可能的话,我想让它工作。

问题是,当我开始问题时,它会停止并让我遇到以下问题:“mscorlib.dll 中发生了 'System.FormatException' 类型的未处理异常” 我也对 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 看起来像这样(数字用空格“”分隔):

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

感谢您的帮助!

【问题讨论】:

  • 调试代码时data1[j]的值是多少?它显然不是一个有效的整数。而这个s 不会只包含你的最后一行吗?

标签: c# arrays string int


【解决方案1】:

可能有一个空字符串进入您的拆分字符串数组。

尝试在进行拆分时定义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
}

【讨论】:

    【解决方案2】:

    您可以使用 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();
                }
    

    【讨论】:

      【解决方案3】:

      你试过int Integer.parseInt(string)吗?

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

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

      【讨论】:

      • Integer.parseInt? o.O 这不是 Java 方法吗?
      • 糟糕,我的错误,@SonerGönül
      猜你喜欢
      • 2012-03-26
      • 1970-01-01
      • 1970-01-01
      • 2021-12-21
      • 2016-08-14
      • 1970-01-01
      • 2016-01-27
      • 2013-05-31
      • 2016-08-13
      相关资源
      最近更新 更多