2013-01-08 49 views
3

我有字符串(10325710),我想將字符串拆分爲數組。將字符串拆分爲數組後,數組將爲{1,0,3,2,5,7,1,0}。請注意,字符串中有兩個1 s和兩個0 s。我不想分割'1'和'0'。因此,我希望得到的數組是{10,3,2,5,7,10}將數字字符串拆分爲數組

有什麼建議嗎?

我的C#代碼:

string myNumber = "10325710"; 
string[] myArray = myNumber.Select(p => p.ToString()).ToArray(); 
+1

你怎麼知道數組中沒有32位?還是僅僅是沒有零點? –

+1

我想,只有值1..10在字符串中。不過,這應該明確說明。 – Spook

+0

輸出數組允許的有效整數範圍是多少? –

回答

16
int[] nums = myNumber.Replace("10", "A") 
        .Select(c => Convert.ToInt32(c.ToString(), 16)) 
        .ToArray(); 

基本上與 「A」 S代替 「10」,且然後處理每個字符作爲基16號。

+2

這是正確的解決方案。 +1 –

+0

+1,那是光滑的 – Habib

+0

+1非常好玩的技巧 –

1

你可以做手工很容易。

int i = 0; 

int len = 0; 
for (int j = 0; j < s.Length; j++) 
    if (s[j] != '0') 
     len++; 

int[] result = new int[len]; 
int index = 0; 
while (i < s.Length) 
{ 
    if (i < s.Length - 1 && int.Parse(s[i + 1].ToString()) == 0) 
    { 
     result[index++] = int.Parse(s[i].ToString()) * 10; 
     i += 2; 
    } 
    else 
    { 
     result[index++] = int.Parse(s[i].ToString()); 
     i++; 
    } 
} 

return result; 
+1

我喜歡這種方式,如果需求發生變化,將來更容易擺弄+1 – RhysW

+2

您確定此代碼適用於這種情況嗎?因爲'if(我

+1

它甚至沒有編譯,因爲'myNumber'似乎是字符串,而'int.Parse(myNumber [i])'不適用於字符。它也不會產生正確的結果。 –

4

嘛,只是將一些正則表達式的表:

Regex.Split(myNumber, @"(?!^)(?=[1-9])"); 
+0

這是另一個很酷的答案。 +1。 –

1

聲明:

var myArray=Regex.Matches(myNumber, @"1?\d").Cast<Match>().Select(p => p.ToString()).ToArray(); 

代碼:

var myNumber="1032571001210345610789"; 
var myMatches=Regex.Matches(myNumber, @"1?\d").Cast<Match>(); 
var myArray=myMatches.Select(p => p.ToString()).ToArray(); 

var whats_in_myArray="{ "+String.Join(", ", myArray)+" }"; 
Debug.Print("{0}", whats_in_myArray); 

輸出:

{ 9, 8, 7, 6, 5, 4, 3, 2, 10, 10, 3, 2, 5, 7, 10, 0, 12, 10, 3, 4, 5, 6, 10, 7, 8, 9 }