2011-02-23 105 views
4

后删除文本我有一个具有以下格式的字符串:字符串发生

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

正如你所看到的,也有,字符的5个出现次数。 我需要4发生后,除去一切,这样最终的结果将是:

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

是否有可能没有foreach?提前致谢。

+0

会不会有永远是,,在年底或莫不是他们之间的事情? – Slotty 2011-02-23 14:17:31

回答

12

你可以做这样的事情:

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

这将在逗号分割的字符串,然后只取前四项( "A", " ABC", " 1"," ACS"),将它们连接到一个字符串与Aggregate(结果:",A, ABC, 1, ACS")和ret除第一个字符以外的所有东西。结果:"A, ABC, 1, ACS"

+1

LINQ中的字符串拼接。这很重要。 – 2011-02-23 14:22:05

+0

工程就像一个魅力!谢谢 – Raffaeu 2011-02-23 14:32:44

+0

您也可以使用Trim(“,”。ToCharArray())语句替换子字符串(删除所有前导和尾随逗号) – Feckmore 2011-04-22 14:31:45

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)); 
    } 
0

如果使用从this questionGetNthIndex方法,你可以使用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); 
+0

错误,因为我无法编写或者是一个foreach,我在这个问题中指出了这一点。 – Raffaeu 2011-02-23 14:33:22

+0

@Raffaeu你的问题只说没有'foreach';没有提到'for'。 – Donut 2011-02-23 14:39:07

+0

@Raffaeu:那个downvote并不好。你说过“没有foreach'有没有可能?” 'for'不是'foreach'。 – canon 2011-02-23 14:46:20