将字符串拆分为字符串

时间:2012-01-12 20:59:30

标签: c# asp.net

我有一个包含两个不同分隔符(|和〜)的字符串。我想先根据一个分隔符(|)进行拆分,然后遍历结果并将结果拆分为第二个分隔符(〜)。从那里我想从第二个分割中取出三个值并将它们分配给我页面上的标签。

我遇到的问题是下面的代码我只能得到项目[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;            
    }     

3 个答案:

答案 0 :(得分: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:您也可以在一次通话中进行多次拆分:

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

答案 1 :(得分:0)

我会寻找产生一个或多个空字符串的第一个分割。使用以下调用来避免:

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

答案 2 :(得分:0)

index out of bounds error表示您使用超过其大小的索引访问数组。 这意味着你概率有这样的输入字符串。

"aaaa~|ccccc~dddd"

首先将其拆分为“|”你得到了

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

之后如果你用“〜”拆分它,你就会得到

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

但是您已使用Lenght == 1分割数组(在第一种情况下)。 由于从程序的真实状态的问题不是绝对清楚,它只是一个猜测可能发生的事情。

所以要解决这个问题,你需要

  • 或修复输入字符串格式(如果必须格式化)

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

  • 或两者

最后一件事:考虑使用Split(new char{'|', '~'})重载并在“一次性”中分割出搅拌器。

希望这有帮助。