2012-01-12 232 views
2

我有一個帶有兩個不同分隔符(|和〜)的字符串。我想首先基於一個分隔符(|)進行分割,然後遍歷結果並將結果分割爲第二個分隔符(〜)。從那裏我想從第二次拆分中取出三個值並將它們分配給我的頁面上的標籤。將字符串拆分爲字符串

我遇到的問題是與下面的代碼我只能得到項目[0],項目[1]和項目[2]我得到一個索引超出界限錯誤。

我不知道我在哪裏出了問題,任何援助將不勝感激!

int rowNumber = 1; 
    foreach (string itemArray in ItemList.Text.Split('|')) 
    { 
     Label tbCM = (Label)FindControl("CM" + rowNumber); 
     Label tbCode = (Label)FindControl("Code" + rowNumber); 
     Label tbAmt = (Label)FindControl("Amt" + rowNumber); 
     HtmlTableRow trItem = (HtmlTableRow)FindControl("trRow" + rowNumber); 

     string[] item = itemArray.Split('~'); 
     tbCM.Text = item[0].TrimStart(','); 
     tbCode.Text = item[1]; 
     tbAmt.Text = item[2]; 

     trItem.Style.Add("display", "block"); 

     rowNumber = rowNumber + 1;    
    }  
+5

輸入字符串的格式是什麼? – LiamB 2012-01-12 21:00:35

+9

以這種方式嘗試拆分的字符串示例非常有用。 – 2012-01-12 21:02:08

+0

除了你的分裂問題的實際答案,我認爲你做錯了什麼。這是什麼字符串某種ViewState替換?也許有一個更好/更可讀的方法。 – 2012-01-12 21:10:15

回答

2

您必須檢查壞輸入:

string[] item = itemArray.Split('~'); 

    if (item.Length == 3) 
    { 
     tbCM.Text = item[0].TrimStart(','); 
     tbCode.Text = item[1]; 
     tbAmt.Text = item[2]; 
    } 
    else 
    { 
     // handle bad input 
    } 

BTW:你也可以做多個Split在一個電話:

string[] Items = itemArray.Split(new char[] {'~', ','}); 
+0

我同意;它實踐防禦性編碼永遠不會傷害。 – stpiker 2012-01-12 21:25:26

0

我會看的第一次分裂產生一個或更多的空字符串。使用下面的調用來避免:

foreach (string itemArray in ItemList.Text.Split('|', StringSplitOptions.RemoveEmptyEntries)) 
0

index out of bounds error意味着你訪問與超過它的大小索引數組。 這意味着你可能有一個像這樣的輸入字符串。

"aaaa~|ccccc~dddd" 

首先用「|」分割它,你

{"aaaa~"}, {"cccc~dddd"} 

如果按「〜」分裂之後,您將獲得

{"aaaa"}, {"cccc","dddd"} 

,但你已經分裂陣列Lenght == 1(在第一種情況下)。 由於從問題真實程序的狀態不是很明顯,它只是一個猜測會發生什麼。

因此,要解決這個問題,你需要

  • 或解決您的輸入字符串格式(如果它是強制性fformat)

  • 或修復你的算法,以便能夠處理不是「好格式化的」字符串

  • 或兩者

最後一件事情是:考慮使用超載,並以「一杆」的方式拆分杆頭。

希望這會有所幫助。

相關問題