我目前正在尝试进行字符串比较-我知道这样做不是最好,但是我需要这种解决方案。
如果我要分析诸如Raiden: HelloWorld
之类的行,则希望提取单独的字符串Raiden
和HelloWorld
以供进一步使用。
我目前确实通过执行以下操作来实现这一目标:
var list = channelMessage.Split(' ', ':', '\n', '\0');
但是,当在list
中打印每个项目的结果和长度时,HelloWorld
字符串的长度是错误的。
Output:
Raiden | length: 6
HelloWorld | length: 11
HelloWorld
的长度应为10,而不是11。我假设行中某处有空字符,但无法弄清楚如何将其全部删除。
旁注:如果我没记错的话,c#的字符串是数组,并且数组的最后一个字符是'\ 0',但是我尝试将其删除(如上所示)
我的假设正确吗?如何正确将HelloWorld
的长度设为10?
答案 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+")