2014-03-18 73 views
0

更新:謝謝你的回答,但我不同意我的問題由另一個線程回答。 「多分隔符」和「多字符分隔符」是兩個不同的問題。在用戶指定的多個分隔符處拆分字符串基於

這是我到目前爲止的代碼:

 List<string> delimiters = new List<string>(); 

     List<string> data = new List<string> 
     { 
     "Car|cBlue,Mazda~Model|m3", 
     //More data 
     }; 

     string userInput = ""; 
     int i = 1; 

     //The user can enter a maximum of 5 delimiters 
     while (userInput != "go" && i <= 5) 
     { 
      userInput = Console.ReadLine(); 
      delimiters.Add(userInput); 
      i++; 
     } 

     foreach (string delimiter in delimiters) 
     { 
      foreach (string s in data) 
      { 
       //This split is not working 
       //string output[] = s.Split(delimiter); 
      } 
     } 

因此,如果用戶輸入 「| c」 和 「〜」,預期的輸出結果是: 「汽車」, 「藍,馬自達」,「型號| m3「

如果用戶輸入」| c「,」| m「和」,「,則預期輸出將爲:」Car「,」Blue「,」Mazda_Mode「,」3「

+0

的[可能重複創建一個數組我如何通過一個多字符分割字符串在C#中的分隔符?](http://stackoverflow.com/questions/1126915/how-do-i-split-a-string-by-a-multi-character-delimiter-in-c) – sab669

+0

我不明白爲什麼你不能使用已經分割的數組。 – rerun

+1

@ sab669多個分隔符和多字符分隔符是兩個完全不同的問題。 –

回答

3

將用戶輸入添加到列表分隔符中。

string data = "Car|cBlue,Mazda~Model|m3"; 
      List<string> delimiters = new List<string>(); 
      delimiters.Add("|c");//Change this to user input 
      delimiters.Add("|m");//change this to user input 

      string[] parts = data.Split(delimiters.ToArray(), StringSplitOptions.RemoveEmptyEntries); 
      foreach (string item in parts) 
      { 
       Console.WriteLine(item); 
      } 
+0

問題是,我無法對分隔符進行硬編碼,因爲它們是由用戶指定的 –

+0

編輯了您的要求的答案。只需添加邏輯即可將所有用戶輸入加入列表對象中 – Unnie

3

String.Split有一個超載,確實如此 - 您只需要將您的List<string>轉換爲string[]

string input = "Car|cBlue,Mazda~Model|m3"; 
List<string> delims = new List<string> {"|c", "~"}; 

string[] out1 = input.Split(delims.ToArray(),StringSplitOptions.None); 

//output: 
// Car 
// Blue,Mazda 
// Model|m3 

delims = new List<string> {"|c", "|m", ","}; 

string[] out2 = input.Split(delims.ToArray(),StringSplitOptions.None).Dump(); 

//output: 
// Car 
// Blue 
// Mazda~Model 
// 3 
+0

它不起作用......我想我的問題更多地是針對「如何分配」動態「分隔符」,因爲我無法對分隔符進行硬編碼。用戶必須指定他們 –

+0

@ C.J。看看我的編輯 - 只需把你的列表,並將其轉換爲字符串數組。 –

2

您可以使用SelectMany從所有data字符串和ToArray()方法得到的結果從

var result = data.SelectMany(s => s.Split(delimiters.ToArray(), StringSplitOptions.None));