2010-07-30 73 views
2

在給定的句子中,我想分成10個字符串。字符串中的最後一個單詞不應該不完整。分割應根據空間或,.C清晰分隔符

例如進行: this is ram.he works at mcity.

現在的10個字符的字符串是, this is ra. 但輸出應該是, this is. 最後一個字不應該是不完整

+0

你怎麼知道最後一個詞是不完整的?您可以查找三個分隔符的正則表達式,然後使用它,但不完整性需求需要更多信息。 – 2010-07-30 11:50:41

+0

如果第一個單詞超過10個字符會發生什麼? – 2010-07-30 11:51:11

+0

你說的字符串分割應該基於SPACE *或。你沒有在空間上分裂? – Nix 2010-07-30 12:24:07

回答

2

您可以使用正則表達式來檢查匹配後的字符不是單詞字符:

string input = "this is ram.he"; 

Match match = Regex.Match(input, @"^.{0,10}(?!\w)"); 
string result; 
if (match.Success) 
{ 
    result = match.Value; 
} 
else 
{ 
    result = string.Empty; 
} 

結果:

this is 

的另一種方法是建立串起來的記號標記,直到將另一個令牌會超出字符限制:

StringBuilder sb = new StringBuilder(); 
foreach (Match match in Regex.Matches(input, @"\w+|\W+")) 
{ 
    if (sb.Length + match.Value.Length > 10) { break; } 
    sb.Append(match.Value); 
} 
string result = sb.ToString(); 
+0

+1甚至沒有考慮使用正則表達式。好多了! – 2010-07-30 12:39:33

0

如果不知道是你正在尋找的東西。請注意,這可以做得更乾淨,但應該讓你開始......(可能要使用StringBuilder而不是String)。

char[] delimiterChars = { ',', '.',' ' }; 
    string s = "this is ram.he works at mcity."; 

    string step1 = s.Substring(0, 10); // Get first 10 chars 

    string[] step2a = step1.Split(delimiterChars); // Get words 
    string[] step2b = s.Split(delimiterChars);  // Get words 

    string sFinal = ""; 

    for (int i = 0; i < step2a.Count()-1; i++)  // copy count-1 words 
    { 
     if (i == 0) 
     { 
      sFinal = step2a[i]; 
     } 
     else 
     { 
      sFinal = sFinal + " " + step2a[i]; 
     } 
    } 

    // Check if last word is a complete word. 

    if (step2a[step2a.Count() - 1] == step2b[step2a.Count() - 1]) 
    { 
     sFinal = sFinal + " " + step2b[step2a.Count() - 1] + "."; 
    } 
    else 
    { 
     sFinal = sFinal + "."; 
    }