首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#:获得正确的字符串长度

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

Stack Overflow用户
提问于 2019-11-13 19:34:55
回答 3查看 84关注 0票数 1

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

如果我要解析像:Raiden: HelloWorld这样的行,我希望提取单独的字符串RaidenHelloWorld,以便进一步使用。

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

但是,在list中打印每个项的结果和长度时,HelloWorld字符串的长度是不正确的。

代码语言:javascript
复制
Output:
Raiden | length: 6
HelloWorld | length: 11

HelloWorld的长度应该是10,而不是11。我假设行内有空字符,但不知道如何将它们全部删除。

Sidenote:如果我没记错,c#的字符串是数组,数组的最后一个字符是'\0‘,但是我尝试删除它(如上面所示)。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-11-13 19:45:28

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

这将导致

代码语言:javascript
复制
var list = channelMessage.Split(':').Select(s => s.Trim());

我也在使用来自linq的Select()。此代码将类似于:

代码语言:javascript
复制
var list = channelMessage.Split(':');
var list2 = new List<string>();
foreach(string s in list)
    list2.add(s.trim());
票数 2
EN

Stack Overflow用户

发布于 2019-11-13 19:44:22

问题是,当您拆分Raiden: HelloWorld时:您将得到以下结果:

代码语言:javascript
复制
Raiden
_HelloWorld

其中_表示空空格。

这里有一个可能的解决方案。当我运行这个控制台应用程序时:

代码语言:javascript
复制
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();
}

我得到:

代码语言:javascript
复制
6
10
票数 0
EN

Stack Overflow用户

发布于 2019-11-13 19:47:56

Split可能会在这个解决方案中给您带来麻烦,因为它不能处理大量的输入。

像regex这样的东西可能会更好,因为char范围,类似于\W+的东西可以匹配任何非世界序列。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58844354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档