将字符串转换为float时出错

时间:2009-11-10 19:23:53

标签: c# regex

我有一个关于转换的菜鸟问题。

string Descript1 = ":1:2:3:4:5";
Regex pattern = new Regex("(:)");

foreach (string sub in pattern.Split(Descript1))
{
    if (sub != ":")
    {
        float a = Convert.ToSingle(sub);
    }
}

但是这段代码不断提出错误:“字符串的格式不正确。”。

有人可以帮助我吗?

感谢。

6 个答案:

答案 0 :(得分:7)

分割的第一个结果是一个空字符串,即字符串中第一个冒号之前的内容。

跳过空字符串而不是跳过“:”(因为它永远不会出现在结果中):

string Descript1 = ":1:2:3:4:5";
Regex pattern = new Regex(":");

foreach (string sub in pattern.Split(Descript1)) {
  if (sub.Length > 0) {
    Single a = Convert.ToSingle(sub);
  }
}

答案 1 :(得分:2)

您不应该需要正则表达式模式。 Split方法有一个重载,它接受你的分隔符作为字符串。

执行console.writeline(或断点),并确保获得一个对转换有意义的字符串。

答案 2 :(得分:2)

我想你的数组将以空字符串开头(因为:在字符串的开头)。第一步是使用调试器来确定数组是否包含您认为它包含的内容。

答案 3 :(得分:0)

if (sub != ":" && sub!="")

答案 4 :(得分:0)

试试这个:

string description = ":1:2:3:4:5";
var floats = from part in description.Split(new char[] { ':' }, StringSplitOptions.RemoveEmptyEntries)
             select float.Parse(part);
foreach (var f in floats)
{
    Console.WriteLine(f);
}

答案 5 :(得分:0)

Regex.Split在数组的开头返回一个空字符串(从Pattern.Split返回)

将其更改为以下内容,它应该有效:

string Descript1 = ":1:2:3:4:5";
Regex pattern = new Regex("(:)");

foreach (string sub in pattern.Split(Descript1))
{
    if (sub != ":" && sub != string.Empty)
    {

        float a = float.Parse(sub);
    }
}