发生字符串后删除文本

时间:2011-02-23 14:13:17

标签: c# regex linq string

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

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

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

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

没有foreach可以吗?提前谢谢。

5 个答案:

答案 0 :(得分:12)

你可以这样做:

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

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

答案 1 :(得分:0)

答案 2 :(得分:0)

如果在结尾处总是两个逗号,则可以使用string.replace

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

答案 3 :(得分:0)

如果没有足够的逗号来满足计数

,假设您想要返回完整的字符串
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));
    }

答案 4 :(得分:0)

如果您使用this question中的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);