将字符串拆分为三个浮点数

3
我使用了C#语言,希望能将由“逗号”和“空格”分隔的3个小数文本进行拆分。
我的操作如下:
double[] doubles = mystr.Trim().Split(new char[] { ' ', ',' })
                .Select(s => Convert.ToDouble(s))
                .ToArray();

当mystr = 33,44,55时,例如,它可以正常工作(数字之间只用一个逗号分隔)。
同样地,当mystr = 33 44 55时,例如,它也可以正常工作(数字之间只用一个空格分隔)。
但是,当mystr = 33, 44, 55时,它就不行了(逗号后面每两个数字之间有一个空格)。
当mystr = 33 44 55时,它同样不起作用(每两个数字之间有两个空格)。
在上述两个例子中,我得到了一个未处理的异常。
如何解决呢?
谢谢!

Regex.Replace(yourstring.Text, " ", ""); - sharp
注意,如果双精度数来自一个其小数分隔符为逗号的系统,则必须使用System.Globalization.CultureInfo.InvariantCulture编写,否则会失败。 - Gusman
3个回答

10

您可以在拆分中添加一个选项来删除空条目:

var array = Array.ConvertAll(mystr.Split(new [] { ' ', ',' },
                             StringSplitOptions.RemoveEmptyEntries),
                             Convert.ToDouble);

使用 Array.ConvertAll() +1 - fubo

1
你可以使用 System.Text.RegularExpressions.Regex
var pattern = @"(\d+)((,\s*|\s+)|$)";
const int RegexTimeoutSeconds = 1;
var matches = Regex.Matches(mystr, pattern, RegexOptions.None, TimeSpan.FromSeconds(RegexTimeoutSeconds));
var doubles = new List<double>();

foreach (Match match in matches)
{
    var group = match.Groups[1];
    var d = Convert.ToDouble(group.Value);
    doubles.Add(d);
}

2
这个正则表达式只有在至少有一个逗号和一个空格的情况下才能工作。第一个例子“33,44,55”将失败。我认为你可能想要使用"[, ]+"作为正则表达式字符串。 - Wyatt Earp

0

尝试指定{{link1:StringSplitOptions}},并使用StringSplitOptions.RemoveEmptyEntries来删除空字符串。

    double[] doubles = mystr.Trim().Split(new char[] { ' ', ',' },StringSplitOptions.RemoveEmptyEntries)
            .Select(Convert.ToDouble)
            .ToArray();

1
@程序员 -- 我想指出,Jonathan Nappee的回答应该被公平地接受,因为它与这个答案几乎完全相同,并且是在这个答案之前发布的(如果你将光标悬停在“X小时前回答”上)。 - rory.ap

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接