2011-12-14 64 views
0

我想下面的字符串分割成三個要素:拆分「第一,中間,中間,最後」與3個元素陣列(第一,中間,最後)

first, middle, middle, middle, middle, last 

那麼結果將是:

splits[0] = "first" 
splits[1] = "middle, middle, middle, middle" 
splits[2] = "last" 

我不知道這是否最好由正則表達式或字符串方法完成。

+0

什麼樣,如果 「第一,第一,」 難道這一切都是在[0] th – subodh 2011-12-14 12:01:10

+0

我的問題涉及到「,」而不是字符串的內容。「first,first,first」會變成[0] =「first」[1] =「first」[2] ] =「第一」 – Mattias 2011-12-14 12:10:56

回答

7
var s = "first, middle, middle, middle, middle, last"; 
var singleItems = s.Split(',').Select(x => x.Trim()); 
var splits = new [] 
      { 
       singleItems.Take(1).Single(), 
       singleItems.Skip(1).Take(singleItems.Count() - 2) 
            .Aggregate("", (s1, s2) => s1 + s2 + ", ") 
            .Trim(' ', ','), 
       singleItems.Skip(singleItems.Count() - 1).Single() 
      }; 

這樣做會是這樣的一種替代方法:

var firstIndex = s.IndexOf(','); 
var lastIndex = s.LastIndexOf(','); 
var splits = new [] 
      { 
       s.Substring(0, firstIndex), 
       s.Substring(firstIndex + 2, lastIndex - (firstIndex + 2)), 
       s.Substring(lastIndex + 2) 
      }; 

我認爲第二個方案是更清潔和更容易理解。但它的缺點是第一個和最後一個逗號必須跟一個空格。第一個版本不存在此要求。

+0

Upvote爲nic e方法!只是我認爲彙總不會按要求的方式給他中間名(中間,[逗號] [空格]中)。 – 2011-12-14 12:04:30

0
string separator = ", "; 
    string input = "first, middle, middle, middle, middle, last"; 
    int i1 = input.IndexOf(separator); 
    int i2 = input.LastIndexOf(separator); 
    string[] splits = new string[3]; 
    splits[0] = input.Substring(0, i1); 
    splits[1] = input.Substring(i1 + separator.Length, i2 - i1 - separator.Length); 
    splits[2] = input.Substring(i2 + separator.Length); 
0
string data = "first, middle, middle, middle, middle, last"; 

string[] splitData = data.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); 

Dictionary<string, string> splits = new Dictionary<string, string>(); 

foreach (var s in splitData) 
{ 
    var temp = s.Trim(); 
    if (splits.ContainsKey(temp)) 
    { 
     splits[temp] += ", " + temp; 
    } 
    else 
    { 
     splits[temp] = temp; 
    } 
} 

string[] result = splits.Select(y => y.Value).ToArray(); 
1

這樣如何

var input = "first, middle, middle, middle, middle, last"; 


var outputs = input.Split(',').Select(wrd=>wrd.Trim()) 
           .GroupBy(wrd=>wrd) 
           .Select(lst => string.Join(", ", lst)).ToArray(); 

輸出[0] = 「第一」
輸出[1] = 「中間,中間,中間,中間」
輸出[2] =「last」

選擇(...修剪())刪除拆分後的前導空格。
GroupBy(...)給出了三個列表({「first」},{「middle」,「middle」,「middle」,「middle」},{「last」}
Select ...加入(...))創建一個具有正確逗號最後的字符串。

心連心,
艾倫。

相關問題