根据字符的第一次出现拆分字符串

Posted

技术标签:

【中文标题】根据字符的第一次出现拆分字符串【英文标题】:Split string based on the first occurrence of the character 【发布时间】:2021-01-29 21:53:21 【问题描述】:

如何根据指定字符的第一次出现来拆分 C# 字符串? 假设我有一个带有值的字符串:

101,a,b,c,d

我想把它拆分成

101
a,b,c,d

即第一次出现逗号。

【问题讨论】:

【参考方案1】:

您可以使用string.Split 指定要返回多少子字符串:

var pieces = myString.Split(new[]  ',' , 2);

返回:

101
a,b,c,d

【讨论】:

【参考方案2】:
string s = "101,a,b,c,d";
int index = s.IndexOf(',');
string first =  s.Substring(0, index);
string second = s.Substring(index + 1);

【讨论】:

@pcnThird 我没有投反对票,但可能是因为它只是代码,没有解释所使用的方法。 @pcnThird,不知道,虽然我认为 GrantWinney 的回答是最好的。 实际上,对于那些无法访问此拆分方法的人来说,这为 GrantWinney 的答案提供了一个很好的替代方案。 (以紧凑框架为例) 可能是因为如果 IndexOf 找不到分隔符,它会返回 -1。在这种情况下,代码将无法正确拆分字符串。它应该首先返回整个字符串,但 first 将为空(或可能崩溃)。【参考方案3】:

您可以使用Substring 分别获取这两个部分。

首先,您使用IndexOf 获取第一个逗号的位置,然后将其拆分:

string input = "101,a,b,c,d";
int firstCommaIndex = input.IndexOf(',');

string firstPart = input.Substring(0, firstCommaIndex); //101
string secondPart = input.Substring(firstCommaIndex + 1); //a,b,c,d

在第二部分,+1 是为了避免包含逗号。

【讨论】:

不要使用这个;如果从未找到逗号,则 firstCommaIndex 可以为 -1。【参考方案4】:

使用string.Split() 函数。它需要最大值。它将创建的块数。假设您有一个字符串“abc,def,ghi”,并且您在其上调用 Split(),并将 count 参数设置为 2,它将创建两个块“abc”和“def,ghi”。确保您将其命名为 string.Split(new[] ',', 2),这样 C# 就不会将其与其他重载混淆。

【讨论】:

但请参阅下面@sierra 的答案【参考方案5】:

在 .net Core 中,您可以使用以下内容;

var pieces = myString.Split(',', 2);

返回:

101
a,b,c,d

【讨论】:

Split(',', 2) 触发警告,Visual Studio 要求将2 转换为char【参考方案6】:
var pieces = myString.Split(',', 2);

这行不通。重载将不匹配,编译器将拒绝它。

一定是这样的:

char[] chDelimiter = ',';
var pieces = myString.Split(chDelimiter, 2);

【讨论】:

以上是关于根据字符的第一次出现拆分字符串的主要内容,如果未能解决你的问题,请参考以下文章

根据出现的任何数字拆分字符串

在某个字符的最后一次出现处拆分字符串

查找字符串中最后一次出现的数字,并按该值拆分字符串

Pandas - 出现字符串时拆分数据并创建列

在第一个空格出现时拆分字符串

Python - 根据 2 个关键字拆分带有长字符串的列表