C#:获取正确的字符串长度

时间:2019-11-13 19:34:55

标签: c# unity3d

我目前正在尝试进行字符串比较-我知道这样做不是最好,但是我需要这种解决方案。

如果我要分析诸如Raiden: HelloWorld之类的行,则希望提取单独的字符串RaidenHelloWorld以供进一步使用。

我目前确实通过执行以下操作来实现这一目标var list = channelMessage.Split(' ', ':', '\n', '\0');

但是,当在list中打印每个项目的结果和长度时,HelloWorld字符串的长度是错误的。

Output:
Raiden | length: 6
HelloWorld | length: 11

HelloWorld的长度应为10,而不是11。我假设行中某处有空字符,但无法弄清楚如何将其全部删除。

旁注:如果我没记错的话,c#的字符串是数组,并且数组的最后一个字符是'\ 0',但是我尝试将其删除(如上所示)

我的假设正确吗?如何正确将HelloWorld的长度设为10?

3 个答案:

答案 0 :(得分:2)

您应该使用Trim()来删除字符串周围的空格 参见:https://docs.microsoft.com/en-us/dotnet/api/system.string.trim?view=netframework-4.8

这将导致

var list = channelMessage.Split(':').Select(s => s.Trim());

我还使用了linq的Select()。此代码类似于:

var list = channelMessage.Split(':');
var list2 = new List<string>();
foreach(string s in list)
    list2.add(s.trim());

答案 1 :(得分:0)

问题在于,当您在{上拆分Raiden: HelloWorld时,会得到以下结果:

Raiden
_HelloWorld

其中_代表空白。

这是一种可能的解决方案。当我运行此控制台应用程序时:

static void Main(string[] args)
{
    var test = "Raiden: HelloWorld";
    List<string> split = test.Split(':').Select(t => t.Trim()).ToList();
    Console.WriteLine(split[0].Length);
    Console.WriteLine(split[1].Length);
    Console.ReadLine();
}

我得到:

6
10

答案 2 :(得分:0)

Split可能会给您带来麻烦,因为它无法处理大量输入。

由于char范围的原因,像正则表达式之类的东西可能会更好,例如\W+这样的东西可以匹配任何非世界序列。

示例: Regex.Split("asdadaSD asdsad asdsad \n asdasdsd", "\\W+")