发生字符串后删除文本

我有一个字符串,具有以下格式:

string sample = "A, ABC, 1, ACS,," 

如你所见,这个角色有5个出现。 我需要在第4次发生后删除所有内容 ,以便最终结果为:

 string result = fx(sample, 4); "A, ABC, 1, ACS" 

没有foreach可能吗? 提前致谢。

你可以这样做:

 sample.Split(',').Take(4).Aggregate((s1, s2) => s1 + "," + s2).Substring(1); 

这将把你的字符串分成逗号,然后只取前四个部分( "A"" ABC"" 1"" ACS" ),将它们连接到一个带有Aggregate字符串(结果: ",A, ABC, 1, ACS" )并返回除第一个字符以外的所有内容。 结果: "A, ABC, 1, ACS"

如果最后总是两个逗号,你可以使用string.replace

http://msdn.microsoft.com/en-us/library/fk49wtc1.aspx

如果您使用此问题中的GetNthIndex方法,则可以使用String.Substring

 public int GetNthIndex(string s, char t, int n) { int count = 0; for (int i = 0; i < s.Length; i++) { if (s[i] == t) { count++; if (count == n) { return i; } } } return -1; } 

所以你可以做到以下几点:

 string sample = "A, ABC, 1, ACS,,"; int index = GetNthIndex(sample, ',', 4); string result = sample.Substring(0, index); 

如果没有足够的逗号来满足计数,则假设您要返回完整的字符串

 String fx(String str, Int32 commaCount) { if (String.IsNullOrEmpty(str)) return str; var i = 0; var strLength = str.Length; while ((commaCount-- > 0) && (i != -1) && (i < strLength)) i = str.IndexOf(",", i + 1); return (i == -1 ? str : str.Substring(i)); }