将字符串拆分为3个不同的数组

时间:2019-04-29 13:49:16

标签: c# arrays string

我从串行端口收到字符串答复,该答复包含3个不同的值。每个值都用';'分隔。 例如;

10;155.4587;0.01

我需要将这些值分开并添加到Listview框中。

我已经找到了Split(';')函数的示例,但我认为无法将拆分值分配给不同的数组。

有没有办法使用/不使用split()函数来执行此提取?

在此先感谢您的帮助。

5 个答案:

答案 0 :(得分:1)

执行此操作的方法多种多样,您可以使用Regex来分隔每个项目并使用Lambda函数。

您可以做一些更基本的事情,例如处理下面的示例:

string s = "10;155.4587;0.01";
string[] a = new String[1];
string[] b = new String[1];
string[] c = new String[1];

string[] z = s.Split(';');

for(int i=0; i< z.Length; i++)
{
    switch(i)
    {
        case 0:
            a[0] = z[i];
            break;
        case 1:
            b[0] = z[i];
            break;
        case 2:
            c[0] = z[i];
            break;

    }
}

Console.WriteLine(a[0] + ' ' + b[0] + ' ' + c[0]);

上面的示例说明了如何操作元素,但缩放比例不够理想,您可能希望使用lambdas进行第一个注释,以寻求匿名路线(请参阅mukesh kudi的回答)。

答案 1 :(得分:1)

编辑 要仅添加一个列表视图项,请使用:

 var s = "10;155.4587;0.01";
 var values = s.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries);

 var listViewItem = new ListViewItem(values[0]);
 listViewItem.SubItems.Add(values[1]);
 listViewItem.SubItems.Add(values[2]);
 listView1.Items.Add(listViewItem);

假设您有多个字符串填充listBox,请尝试:

         ListView listView1 = new ListView();
         listView1.Bounds = new Rectangle(new Point(10, 10), new Size(300, 200));
         listView1.View = View.Details;
         listView1.GridLines = true;
         listView1.Columns.Add("TD");
         listView1.Columns.Add("AD");
         listView1.Columns.Add("CT", -2);
         var sValues = new string[] { "10;155.4587;0.01", "11;156.4587;0.02", "12;157.4587;0.03" };
         var values = sValues.Select(x => x.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries))
                           .Select(x =>
                           {
                              var listViewItem = new ListViewItem(x[0]);
                              listViewItem.SubItems.Add(x[1]);
                              listViewItem.SubItems.Add(x[2]);
                              return listViewItem;
                           });
         listView1.Items.AddRange(values.ToArray());

答案 2 :(得分:0)

您可以在linq的帮助下获得此信息...

string s = "10;155.4587;0.01";
var arrList = s.Split(';').Select(x => new string[] { x }).ToArray();

此处arrList包含三个数组。但我不确定这对您有什么帮助。如果要将此结果与ListView绑定,则必须遍历此集合并获取每个数组值并绑定到Listview。您可以通过遍历索引的单个数组来做到这一点。

答案 3 :(得分:0)

假设输入字符串数组...

        string[] a1 = new string[] {
            "10; 155.4587; 0.01",
            "20; 255.4587; 0.02",
            "30; 355.4587; 0.03",
        };

        List<string> r1 = new List<string>();
        List<string> r2 = new List<string>();
        List<string> r3 = new List<string>();

        foreach (string t1 in a1)
        {
            string[] t2 = t1.Split(";");
            r1.Add(t2[0]);
            r2.Add(t2[1]);
            r3.Add(t2[2]);
        }

答案 4 :(得分:0)

感谢所有帮助。 在@Captain Wibble的建议下,我成功地解码了回复并添加到Listview项。

这是我为遇到同样麻烦的人所做的; 首先,我添加了数据包“ \ r \ n”

  

10; 12.2345; 0.01 \ r \ n

我曾经用过

  

serial.ReadLine()

接收输入数据的功能。 将数据解码并存储到我使用的listview对象中;

     var s = text;
        string[] a = new String[3];
        //string[] b = new String[1];
        //string[] c = new String[1];

        string[] z = s.Split(';');

        for (int i = 0; i < z.Length; i++)
        {
            switch (i)
            {
                case 0:
                    a[0] = z[i];
                    break;
                case 1:
                    a[1] = z[i];
                    break;
                case 2:
                    a[2] = z[i];
                    break;

            }
        }

        itm = new ListViewItem(a);
        listView5.Items.Add(itm);