【问题标题】:Split String and then parse as decimal拆分字符串,然后解析为十进制
【发布时间】:2016-06-25 01:29:11
【问题描述】:

我有以下文字:

   3.024         2.184        5.0000

在字符串变量中

然后我将其拆分并尝试解析十进制数字,这是我的代码:

string linea;
linea = "       3.024         2.184        5.0000";
string[] test = linea.Split(' ');
Decimal[] numbers = Array.ConvertAll(test, decimal.Parse);

现在,当我进行解析时,我得到了这个错误:

输入字符串的格式不正确。

你知道为什么会这样吗?

【问题讨论】:

  • 拆分可能也会给您留下一堆空字符串,解析时可能会引发错误。像这样:[“”,“”,“”,“”,“”,“”,“”,“3.024”,“”,“”,“”,“”,“”,“”,“”, ""、"2.184"、""、""、""、""、""、""、""、"5.0000"]
  • linea 中的多个空格导致Split() 创建超过 3 个元素。将这些多个空间挤成一个并修剪两侧,然后再拆分它们。

标签: string split numbers decimal


【解决方案1】:

不确定您使用的是什么语言,它是否支持正则表达式拆分?

linea.Split('\s+');

更新

既然学的是C#,那我就加个add'l info吧

string[] test = Regex.Split(linea, @"\s+");

https://msdn.microsoft.com/en-us/library/8yttk7sy(v=vs.110).aspx

【讨论】:

  • 谢谢,我正在使用 C#。我会试试你的建议
【解决方案2】:

在@neouser99 和 cmets 的带领下,我想出了这个

string linea;
linea = "       3.024         2.184        5.0000";
string[] test = Regex.Replace(linea.Trim(), @"\s+", ",").Split(',');
Decimal[] numbers = Array.ConvertAll(test, decimal.Parse);

【讨论】:

    【解决方案3】:

    为空的“”值添加一个捕获,当你去解析时跳过它们。虽然,最好消除它们,在这种情况下(假设值之间的空格数不是固定数量)递归地用空格替换每个双空格,直到 'linea' 中没有双空格。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-02
      • 1970-01-01
      • 1970-01-01
      • 2013-06-11
      • 2017-05-29
      相关资源
      最近更新 更多