如何从数组字符串c#中获取子字符串数组

时间:2015-04-10 02:13:24

标签: c# arrays string

我是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中获取到数组的末尾?

2 个答案:

答案 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();

导致:

Results