获取长字符串中每个新行的第一个字?

时间:2015-01-08 08:54:02

标签: c# string

我正在尝试在我的Unity应用中添加排行榜 我有一个长字符串如下(只是一个例子,实际字符串是来自我的Web服务的http管道数据,而不是手动存储):

string str ="name1|10|junk data.....\n
             name2|9|junk data.....\n
             name3|8|junk data.....\n
             name4|7|junk data....."

我想从每一行获取第一个单词(第一个管道之前的字符串'|',如name1,name2 ......)并将其存储在一个数组中然后获取数字(10,9,8 ...将'|'表示出来并将其存储在另一个中。 任何人都知道最好的方法吗?

5 个答案:

答案 0 :(得分:1)

首先用换行符分割:

string[] lines = str.Split(new string[]{Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);

然后你可以使用LINQ获取两个数组:

var data = lines.Select(l => l.Trim().Split('|')).Where(arr => arr.Length > 1);
string[] names   = data.Select(arr => arr[0].Trim()).ToArray();
string[] numbers = data.Select(arr => arr[1].Trim()).ToArray();

答案 1 :(得分:1)

在这里小提琴:https://dotnetfiddle.net/utp4HK

下面的代码,您可能想要重新审视算法的性能,但如果这不是问题,这将起到作用;

using System;

public class Program
{
    public static void Main()
    {
        string str ="name1|10|junk data.....\nname2|9|junk data.....\nname3|8|junkdata.....\nname4|7|junk data.....";

        foreach (var line in str.Split('\n'))
        {
            Console.WriteLine(line.Split('|')[0]);  
        }
    }
}

答案 2 :(得分:0)

查看有关拆分字符串的此链接:http://msdn.microsoft.com/en-us/library/ms228388.aspx

你可以先用\ n作为分隔符来分割长字符串,然后创建一个字符串数组(每行一个)。

然后,你可以用|分割每一行作为界限。名称将是数组的第0个索引,数字将是数组的第1个索引。

答案 3 :(得分:0)

首先,不能使用多行字符串而不使用verbatim string literal。使用逐字字符串文字,您可以根据\r\nEnvironment.NewLine分割字符串;

string str = @"name1|10|junk data.....
               name2|9|junk data.....
               name3|8|junk data.....
               name4|7|junk data.....";
var array = str.Split(new []{Environment.NewLine},
                      StringSplitOptions.RemoveEmptyEntries);
foreach (var item in array)
{
   Console.WriteLine(item.Split(new[]{"|"},
                     StringSplitOptions.RemoveEmptyEntries)[0].Trim());
}

输出将是;

name1
name2
name3
name4

答案 4 :(得分:0)

试试这个:

string str ="name1|10|junk data.....\n" +
                         "name2|9|junk data.....\n" +
                         "name3|8|junk data.....\n" +
                         "name4|7|junk data.....";

            string[] tempArray1 = str.Split('\n');
            string[] tempArray2 = null;

            string[,] newArray = null;


            for (int i = 0; i < tempArray1.Length; i++)
            {
                tempArray2 = tempArray1[i].Split('|');

                if (newArray[0, 0].ToString().Length == 0)
                {
                    newArray = new string[tempArray1.Length, tempArray2.Length];
                }

                for (int j = 0; j < tempArray2.Length; j++)
                {
                    newArray[i,j] = tempArray2[j];
                }
            }