我是c#的新手 我有一个字符串被分成字符串数组,其中一个元素需要再次拆分成字符串数组,因为它的解析方式不同。然后我试图将字符串数组转换为浮点数组,并将它们组合成一个最终的float数组,每个人都在原始位置。
string ido = "433, 045, 3-3-15, 444, 0.6,3.9,4,5,5,4,3,3";
string[] sn= ido.Split(',', 13, StringSplitOptions.RemoveEmptyEntries);
string subnum = sn[2];
string[] st = subnum.Split('-',3,StringSplitOptions.RemoveEmptyEntries);
float [] stNum = array.ConvertAll<string, float>(st, float.Parse)
float[] fArray = new float[ float.Parse(sn[0]), float.Parse(sn[1]),...
stNum, float.Parse(sn[3:end])];
我知道最后一行是错误的。我不想单独将每个元素都提供给float.Parse()。我想要有更好的方法吗?我可以使用ConvertAll但是如何才能将字符串数组中的元素从元素3中获取到数组的末尾?
答案 0 :(得分:1)
由于你需要一个浮点数组的结果,你可以简单地在','
和'-'
字符上拆分原始字符串,这样你就得到了一个只有&#34的数组。 ;数字字符串&#34;。然后,您可以使用float.TryParse()
转换每个&#34;数字字符串&#34;到float
并将它们添加到您的数组中。
private static void Main()
{
string ido = "433, 045, 3-3-15, 444, 0.6,3.9,4,5,5,4,3,3";
// Split on both comma and dash
var items = ido.Split(',', '-');
// This list will hold all the items converted to floats
var result = new List<float>();
foreach (var item in items)
{
float temp;
// Use TryParse to ensure we can successfully convert each item
if (float.TryParse(item, out temp))
{
result.Add(temp);
}
}
// Display final results
Console.WriteLine(string.Join(", ", result));
}
输出继电器:
433,45,3,3,15,444,0.6,3.9,4,5,5,4,3,3
请注意,在上面的示例中,我使用了List<float>
,因为如果TryParse
对原始数组中的任何项目失败,我们就不会将该项目添加到最终结果中,因此我们不会#39;确定要初始化数组的项目数。如果确实需要一个数组,您可以通过调用ToArray()
方法将列表转换为数组,如下所示:
float[] arrayResult = result.ToArray();
<强>更新强>
如果您熟悉LINQ,还可以将整个内容缩短为几行:
string ido = "433, 045, 3-3-15, 444, 0.6,3.9,4,5,5,4,3,3";
float temp = 0; // Temporarily holds each converted item
float[] arrayResult = ido.Split(',', '-')
.Where(item => float.TryParse(item, out temp))
.Select(item => temp)
.ToArray();
答案 1 :(得分:0)
这有点冗长,但我认为它能满足您的需求。
string ido = "433, 045, 3-3-15, 444, 0.6,3.9,4,5,5,4,3,3";
string[] sn= ido.Split(new char[]{','}, 13, StringSplitOptions.RemoveEmptyEntries);
ArrayList list = new ArrayList();
foreach (string str in sn)
{
string trimmedStr = str.Trim();
float f;
if (float.TryParse(trimmedStr, out f))
{
list.Add(f);
}
else if (trimmedStr.Contains("-"))
{
ArrayList list2 = new ArrayList();
foreach (string str2 in trimmedStr.Split(new char[]{'-'}, StringSplitOptions.RemoveEmptyEntries))
{
string trimmedStr2 = str2.Trim();
if (float.TryParse(trimmedStr2, out f))
{
list2.Add(f);
}
}
list.Add(list2.ToArray());
}
}
object[] array = list.ToArray();
导致: