在c#输出最后一个字符串中修剪字符串

时间:2018-05-30 21:55:59

标签: c#

我目前正在制作游戏,而且我已经将字符串拆分了一切,但我如何修剪字符串并输出最后一行或中间的一行?

代码:

text = "Username:King100 ID:100 Level:10";
string[] splittext = text.Split(' ');
foreach (var texs in splittext)
{
    Console.WriteLine(texs);
}

输出:

Username:King100  
ID:100  
Level:10  

我只想在控制台中显示级别10如何工作? 感谢他们的帮助。

编辑:级别可以经常更改为10或100或1000

7 个答案:

答案 0 :(得分:2)

正则表达式是更灵活的解决方案。但是,如果您的文本格式是contsant,您可以使用这种简单的方式:

string level = text.Substring(text.LastIndexOf(':') + 1);

答案 1 :(得分:1)

您还可以使用正则表达式来解决此问题:

var regex = new Regex(@"Level:(?<Level>\d*)");
var matches = regex.Matches("Username:King100 ID:100 Level:10");

if (matches.Count > 0 && matches[0].Success)
{
    Console.WriteLine(matches[0].Groups["Level"].Value);
}

答案 2 :(得分:1)

var text = "Username:King100 ID:100 Level:10";

/* 
   Splits the given string on spaces and then splits on ":"
   and creates a Dictionary ("Dictionary<TKey, TValue>")
*/
var dict = text.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)
               .Select(part => part.Split(':'))
               .ToDictionary(split => split[0], split => split[1]);

//If the dictionary count is greater than Zero
if(dict.Count > 0)
{
  var levelValue = dict["Level"].ToString();
}    

答案 3 :(得分:0)

如果level始终是字符串的最后一部分,而您关心的只是实际数字,那么您可以这样做:

var level = text.Split(':').LastOrDefault();

这只会在':'上拆分,并为您提供最后一个(或默认)元素。根据您的示例输入level = "10"

答案 4 :(得分:0)

好的,因为我很讨厌并且完全厌倦了工作,所以我决定对每个人的解决方案进行基准测试。

前提是简单地制作一个1000(规模)字符串(以给定格式)的数组,最后带有随机的正int;

  

注意:我将每个解决方案都int.Parse作为结果,因为它似乎更有用

<强>矿

这只使用fixedunsafe,指针和无错误检查

var level = 0;
fixed (char* pitem = item)
{
   var len = pitem + item.Length;

   for (var p = pitem ; p < len; p++)
      if (*p >= '0' && *p <= '9')
         level = level * 10 + *p - 48;
      else
         level = 0;                 
}

<强>结果

Mode            : Release
Test Framework  : .NET Framework 4.7.1
Benchmarks runs : 1000 times (averaged)

Scale : 1,000
Name       |   Average |   Fastest | StDv |     Cycles | Pass |      Gain
--------------------------------------------------------------------------
Mine       |  0.095 ms |  0.085 ms | 0.01 |    317,205 | Yes  |   96.59 %
Sanan      |  0.202 ms |  0.184 ms | 0.02 |    680,747 | Yes  |   92.75 %
Zaza       |  0.373 ms |  0.316 ms | 0.10 |  1,254,302 | Yes  |   86.60 %
Kishore    |  0.479 ms |  0.423 ms | 0.06 |  1,620,756 | Yes  |   82.81 %
Hussein    |  1.045 ms |  0.946 ms | 0.11 |  3,547,305 | Yes  |   62.50 %
Maccettura |  2.787 ms |  2.476 ms | 0.39 |  9,474,133 | Base |    0.00 %
Hardkoded  |  6.691 ms |  5.927 ms | 0.67 | 22,750,311 | Yes  | -140.09 %
Tom        | 11.561 ms | 10.635 ms | 0.78 | 39,344,419 | Yes  | -314.80 %

摘要

  • 所有的解决方案都以不同的方式做不同的事情,比较它们并不是真正的苹果。

  • 不要使用我的,这完全是不切实际的,只是为了好玩。使用对您来说最有意义的版本,这是最强大和最容易维护的版本。

  • 与往常一样,正则表达式是最慢的。

答案 5 :(得分:-1)

string text = texs.Substring(texs.IndexOf("Level:")+6);
System.Console.WriteLine(text);

答案 6 :(得分:-1)

试试这个:

string input = "Username:King100 Level:10 ID:100";

也适用于:

var ArrayEntity = [CClass]()
var ParentOne = CClass()
var ParentTwo = CClass()