获取长字符串中每一行的第一个单词?
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\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
试试这个:
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];
}
}
我正在尝试在我的 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\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
试试这个:
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];
}
}