2012-01-12 236 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)

  • 或修复你的算法,以便能够处理不是“好格式化的”字符串

  • 或两者

最后一件事情是:考虑使用超载,并以“一杆”的方式拆分杆头。

希望这会有所帮助。

相关问题