根据字符的第一次出现拆分字符串
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);
【讨论】:
以上是关于根据字符的第一次出现拆分字符串的主要内容,如果未能解决你的问题,请参考以下文章