2011-02-23 104 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