我需要解析它包含的双精度字符串并将其存储在双精度列表中,以便稍后我可以获取值并将它们存储在变量中。
你可以在richtextbox的图片上看到我现在有字符串内容我试图像这样解析它
public void GetAll()
{
List<double> doubles = new List<double>();
MatchCollection matches = Regex.Matches(buff, @"(([-]|[+])?\d+[.]\d+)");
foreach (Match match in matches)
{
string val = match.Groups[1].Value;
doubles.Add(double.Parse(val));
}
}
它并没有将双打存储在列表中
我需要存储它们,以便它们显示doubles[0]
= vv_in的值,doubles[1]
= vv_out的值等等。
答案 0 :(得分:4)
您想要存储可能位于字符串末尾的double吗?我使用这种方法:
List<double> doubles = new List<double>();
string[] lines = yourTextBox.Lines;
foreach(string line in lines)
{
int lastSpaceIndex = line.LastIndexOf(' ');
string doubleToken = line.Substring(++lastSpaceIndex);
double d;
if(double.TryParse(doubleToken, out d))
doubles.Add(d);
}
答案 1 :(得分:1)
如果没有您的数据,无法真正测试它,但这值得一试:
var doubles = from line in buff.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries)
from item in line.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)
where double.TryParse(item, out var _)
select double.Parse(item);
正如评论中所提到的,这使用了丢弃物,这是一种C#7功能。
答案 2 :(得分:0)
实际上你的代码工作得很好。你唯一需要调整的是,Parse
需要考虑文化。我改变你的正则表达式,以便它可以处理可选的十进制数字:
List<double> doubles = new List<double>();
MatchCollection matches = Regex.Matches(buff, @"(([-]|[+])?\d+(.\d+)?)");
foreach (Match match in matches)
{
string val = match.Groups[1].Value;
doubles.Add(double.Parse(val, System.Globalization.CultureInfo.InvariantCulture));
}
答案 3 :(得分:-1)
首先应将值拆分为单行,然后将每行划分为空格。最后尝试将获得的数组的第二部分解析为double:
public void GetAll()
{
List<double> doubles = new List<double>();
foreach(var line in buff.Split('\n')
{
var parts = line.Split();
if(parts.Length == 3)
{
double d;
if(double.TryParse(parts[2], out d)
doubles.Add(d);
}
}
}