我正在尝试在我的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 ...将'|'表示出来并将其存储在另一个中。 任何人都知道最好的方法吗?
答案 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\n
或Environment.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];
}
}