2013-05-27 31 views
-4

我有以下文字
part1:part2使用填充一個String []數組拆分

和下面的String []數組
string[] tmp = new string[3];

我怎麼可以拆分我的文字,把它放入數組等等該陣列是這樣的:
{"part1", "part2", ""}

我嘗試使用.split(':');但只是重新分配陣列,因此它只有個2元素,而不是

感謝

+4

你只有兩個元素,你怎麼指望從拆分三個要素? – Habib

+0

string [] tmp = new string [3];無需指定tmp中的元素數量 – David

+0

因此,無論輸入上下文包含什麼內容,您總是希望將一個空字符串添加到數組的末尾? – LarsH

回答

5

雖然我肯定有一個更好的方式做你正在嘗試做的,在我看來,實現精確結果你是經過最簡單的方法是做一個副本:

var input = "text1:text2"; 
var temp = new [] {"", "", ""}; 
var split = input.Split(':'); 
Array.Copy(split, temp, split.Length <= 3 ? split.Length : 3); 
+1

+1,但這個答案不會導致*正是* OP的要求。最後一個元素是'null'而不是''「'。 –

+2

@DanielHilgarth啊錯過了!修正了答案;) –

+0

這是否真的是實現這一結果的唯一方法?似乎不太可能。 – LarsH

2

如果你真的需要三個要素所得數組中,你將有結果從string.Split複製到最終陣列,例如通過使用一個簡單的循環:

var result = new string[3]; 
var split = "part1:part2".Split(":"); 

for(var i = 0; i < result.Length; ++i) 
{ 
    if(i < split.Length) 
     result[i] = split[i]; 
    else 
     result[i] = string.Empty; 
} 
4

並不過分優雅,但如果這是你想要什麼,你可以Resize數組。

string [email protected]"part1:part2"; 
var result = input.Split(':'); 

Array.Resize(ref result, 3); 
result[2]=string.Empty; 
0
var str = "part1:part2"; 
var result = new string[3]; 
result = (str + "".PadLeft(result.Length - str.Count(c=>c==':') - 1,':')).Split(':'); 
0
private static string[] ProcessInput(string input, int length) 
    { 
     // handle empty or null input 
     if (string.IsNullOrEmpty(input)) 
      return null; 

     var items = input.Split(':').ToList(); 
     // adding empty strings untill given length 
     while (items.Count <= length) 
     { 
      items.Add(string.Empty); 
     } 
     //even split return more items than length return expected length 
     return items.Take(length).ToArray(); 
    } 

調用方法

var result = ProcessInput("text1:text2:text4:text5", 3);