根据字符的首次出现来分割字符串


76

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

101,a,b,c,d

我想将其拆分为

101
a,b,c,d

那是第一次出现逗号字符。

Answers:


181

您可以使用以下命令指定要返回的子字符串数string.Split

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

返回值:

101
a,b,c,d

19
string s = "101,a,b,c,d";
int index = s.IndexOf(',');
string first =  s.Substring(0, index);
string second = s.Substring(index + 1);

4
@pcnThird我没有拒绝投票,但可能是因为这只是代码,没有对所使用方法的解释。
马克·霍尔

@pcnThird,不知道,尽管我认为GrantWinney的答案是最好的。
Arin Ghazarian 2014年

实际上,对于那些无法使用此拆分方法的用户,此方法可以为GrantWinney的回答提供一个很好的选择。(那些使用紧凑框架的例子)
Maniz '17

3
可能是因为如果IndexOf找不到分隔符,则它返回-1。在这种情况下,代码将无法正确分割字符串。它应首先返回整个字符串,但first将为空(否则可能会崩溃)。
ThisGuy

9

您可以用来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避免包含逗号。


1
不要使用这个;如果从未发现逗号,则firstCommaIndex可以为-1。
Ruud van Gaal

4

使用string.Split()功能。最多 它将创建的块数。假设您有一个字符串“ abc,def,ghi” count,并且将其参数设置为2的Split()调用,它将创建两个块“ abc”和“ def,ghi”。确保像string.Split(new[] {','}, 2)这样调用它,以使C#不会将其与其他重载混淆。


见下文@sierra的答案
Fattie

2

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

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

返回值:

101
a,b,c,d

2
Split(',', 2)触发警告,Visual Studio要求强制转换2char
心教堂

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

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

因此必须是:

char[] chDelimiter = {','};
var pieces = myString.Split(chDelimiter, 2);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.