C# 把绳子分成三双
我用的是C#,我希望拆分文本由3个由逗号和空格分隔的双字符组成 我做到了: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时,它工作正常(
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小时前”上)