如何获得不同情况下的特定子字符串

时间:2018-11-08 19:34:26

标签: c# .net

我正试图从看起来像这样的字符串中获取用户名 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 } } MyUsername123Cool_UsernametheuserN4m3

获取这些名称的最佳方法是什么? 我考虑过正则表达式,但是我不知道这是否占用大量资源,然后考虑进行订阅,但是我并不担心如何使特定部分从哪个索引结束处开始,因为所有用户名的长度都可以不同。

4 个答案:

答案 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];