【问题标题】:Parse multiple doubles from string in C#在 C# 中从字符串中解析多个双精度数
【发布时间】:2009-09-10 15:54:03
【问题描述】:

我有一个包含已知数量的双精度值的字符串。解析字符串并将结果插入匹配的标量变量的最干净的方法是什么(通过 C#)。基本上,我想做这个sscanf 语句的等价物,但是在C#中:

sscanf( textBuff, "%lg %lg %lg %lg %lg %lg", &X, &Y, &Z, &I, &J, &K );

...假设“textBuff”可能包含以下内容:

“-1.123 4.234 34.12 126.4 99 22”

...并且每个值之间的空格字符数可能会有所不同。

感谢任何指点。

【问题讨论】:

    标签: c# text parsing


    【解决方案1】:
    string textBuff = "-1.123    4.234  34.12  126.4  99      22";
    
    double[] result = textBuff
        .Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)
        .Select(s => double.Parse(s))
        .ToArray();
    
    double x = result[0];
    //    ...
    double k = result[5];
    

    string textBuff = "-1.123    4.234  34.12  126.4  99      22";
    
    string[] result = textBuff
        .Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
    
    double x = double.Parse(result[0]);
    //    ...
    double k = double.Parse(result[5]);
    

    【讨论】:

    • 认为您需要一个用于该选择的 lambda。 Select(x => double.Parse(x)) 应该可以工作。
    • @Ty - 显示的代码将起作用。 Lamba 可以与方法组本身交换。
    • @Drew:泰是对的。 “方法 ...Select... 的类型参数无法从用法中推断出来。尝试明确指定类型参数。”我已经解决了。
    • 第一个选项真的从我自己的代码中删减了很多。谢谢dtb。 Ty 是绝对正确的。
    【解决方案2】:

    您可以使用 String.Split(' ', StringSplitOptions.RemoveEmptyEntries) 将其拆分为“单个值”。然后是直接的 Double.Parse(或 TryParse)

    【讨论】:

      【解决方案3】:
      foreach( Match m in Regex.Matches(inputString, @"[-+]?\d+(?:\.\d+)?") )
          DoSomething(m.Value);
      

      【讨论】:

      • 问题的答案移到DoSomething()中,不接受1E6等
      猜你喜欢
      • 2012-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-21
      • 2010-11-27
      相关资源
      最近更新 更多