Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 把绳子分成三双_C#_String_Split - Fatal编程技术网

C# 把绳子分成三双

C# 把绳子分成三双,c#,string,split,C#,String,Split,我用的是C#,我希望拆分文本由3个由逗号和空格分隔的双字符组成 我做到了: double[] doubles = mystr.Trim().Split(new char[] { ' ', ',' }) .Select(s => Convert.ToDouble(s)) .ToArray(); 例如,当mystr=33,44,55时,它工作正常(数字仅用一个逗号分隔) 此外,例如,当mystr=33 44 55时,它工作正常(

我用的是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(两个数字之间有两个空格)时,它也不起作用

在上述两个示例中,我都得到了一个未处理的异常

我怎样才能解决它


谢谢

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

var array = Array.ConvertAll(mystr.Split(new [] { ' ', ',' },
                             StringSplitOptions.RemoveEmptyEntries),
                             Convert.ToDouble);
只需尝试指定,然后使用
StringSplitOptions.RemoveEmptyEntries
删除空字符串

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

您可以使用
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);
}
var模式=@“(\d+)(,\s*|\s+|$)”;
const int RegexTimeoutSeconds=1;
var matches=Regex.matches(mystr、pattern、RegexOptions.None、TimeSpan.FromSeconds(RegexTimeoutSeconds));
var doubles=新列表();
foreach(匹配中的匹配)
{
var group=match.Groups[1];
var d=转换为双(组值);
双倍。加(d);
}

Regex.Replace(yourstring.Text,“,”)注意,如果double来自一个十进制分隔符为逗号的系统,它将失败,除非使用system.Globalization.CultureInfo.InvariantCulture.for使用
Array.ConvertAll()
+1此正则表达式仅在至少有一个逗号和一个空格时才有效。“33,44,55”的第一个例子将失败。我想您可能希望正则表达式字符串使用
“[,]+”
。@程序员--我想指出,Jonathan Nappee的答案应该被公平地接受,因为它与这个答案几乎相同,并且是在这个答案出现之前发布的(如果您将光标悬停在“回答的X小时前”上)