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

Get first word on every new line in a long string?

我正在尝试在我的 unity 应用程序中添加排行榜 我有一个很长的字符串如下(只是一个例子,实际字符串是来自我的网络服务的 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。 .. 将 '|') 放入另一个中。 有人知道这样做的最佳方法是什么吗?

查看关于拆分字符串的 link:http://msdn.microsoft.com/en-us/library/ms228388.aspx

您可以先创建一个字符串数组(每行一个),方法是用 \n 作为分隔符拆分长字符串。

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

首先按换行符分割:

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

Fiddle 这里: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]);  
        }
    }
}

首先,如果不使用 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

试试这个:

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];
                }
            }