我目前正在尝试进行字符串比较--我知道这样做不是最好的,但我需要这个解决方案。
如果我要解析像:Raiden: HelloWorld这样的行,我希望提取单独的字符串Raiden和HelloWorld,以便进一步使用。
--我目前确实通过执行以下操作来实现这个:var list = channelMessage.Split(' ', ':', '\n', '\0');
但是,在list中打印每个项的结果和长度时,HelloWorld字符串的长度是不正确的。
Output:
Raiden | length: 6
HelloWorld | length: 11HelloWorld的长度应该是10,而不是11。我假设行内有空字符,但不知道如何将它们全部删除。
Sidenote:如果我没记错,c#的字符串是数组,数组的最后一个字符是'\0‘,但是我尝试删除它(如上面所示)。
我的假设是正确的吗?我如何才能正确地将HelloWorld的长度设为10?
发布于 2019-11-13 19:45:28
您应该使用Trim()删除字符串周围的空白参见:https://learn.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());发布于 2019-11-13 19:44:22
问题是,当您拆分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发布于 2019-11-13 19:47:56
Split可能会在这个解决方案中给您带来麻烦,因为它不能处理大量的输入。
像regex这样的东西可能会更好,因为char范围,类似于\W+的东西可以匹配任何非世界序列。
示例:Regex.Split("asdadaSD asdsad asdsad \n asdasdsd", "\\W+")
https://stackoverflow.com/questions/58844354
复制相似问题