我正试图从看起来像这样的字符串中获取用户名 chunk
@RequestParam(value = key, required = false) Integer key
用户名将为static void Main(string[] args)
{
List<string> Lines = new List<string>()
{
"[20:03:01 INFO]: UUID of player MyUsername123 is b87e1cbc-c67c-4026-a359-8659de8b4",
"[21:03:10 INFO]: UUID of player Cool_Username is b7ecbc-c67c-4026-a359-8652f9de8b4",
"[22:23:10 INFO]: UUID of player theuserN4m3 is b87eabc-c67c-4026-a359-8652ad9dssdse8b4",
"[20:08:10 INFO]: UUID of player WhatANiceUsername is b87g1cbc-c67c-4026-a359-8652agde8b4",
};
foreach (var line in Lines)
{
//Get the username part
}
}
,MyUsername123
,Cool_Username
,theuserN4m3
获取这些名称的最佳方法是什么? 我考虑过正则表达式,但是我不知道这是否占用大量资源,然后考虑进行订阅,但是我并不担心如何使特定部分从哪个索引结束处开始,因为所有用户名的长度都可以不同。
答案 0 :(得分:4)
使用空格将包含数组索引5的字符串分隔为包含用户名。
public void SplitExample()
{
List<string> Lines = new List<string>()
{
"[20:03:01 INFO]: UUID of player MyUsername123 is b87e1cbc-c67c-4026-a359-8659de8b4",
"[21:03:10 INFO]: UUID of player Cool_Username is b7ecbc-c67c-4026-a359-8652f9de8b4",
"[22:23:10 INFO]: UUID of player theuserN4m3 is b87eabc-c67c-4026-a359-8652ad9dssdse8b4",
"[20:08:10 INFO]: UUID of player WhatANiceUsername is b87g1cbc-c67c-4026-a359-8652agde8b4",
};
foreach(var i in Lines)
{
var splitArray = i.Split(' ');
Console.WriteLine(splitArray[5]);
}
}
答案 1 :(得分:4)
我将字符串分割为space
个字符,然后获取用户名字段的索引(因为您说过它始终位于同一位置)。
foreach (var line in Lines)
{
string[] trimmed = line.Split(' ');
string username = trimmed[5];
}
您可能希望在错误处理方面做得更好,但这应该可以帮助您入门。
答案 2 :(得分:0)
字符串本质上是IEnumerable<char>
,因此可以使用一点Linq来代替使用split。我们知道用户名从固定位置开始,并且用户名中不允许使用空格。有了这些知识,唯一未知的是用户名有多长时间。我们可以在Linq中使用Skip()
和TakeWhile()
扩展方法从字符串中提取用户名:
var usernames = lines.Select(
line => new String(line.Skip(32).TakeWhile(c => !char.IsWhiteSpace(c)).ToArray()));
提琴here
答案 3 :(得分:0)
另一种LINQ-ish解决方案:
List<string> lines = new List<string>()
{
"[20:03:01 INFO]: UUID of player MyUsername123 is b87e1cbc-c67c-4026-a359-8659de8b4",
"[21:03:10 INFO]: UUID of player Cool_Username is b7ecbc-c67c-4026-a359-8652f9de8b4",
"[22:23:10 INFO]: UUID of player theuserN4m3 is b87eabc-c67c-4026-a359-8652ad9dssdse8b4",
"[20:08:10 INFO]: UUID of player WhatANiceUsername is b87g1cbc-c67c-4026-a359-8652agde8b4",
};
IEnumerable<string> players = from line in lines select line.Split(' ')[5];