如何拆分字符串,然后将字符串的每个部分放在文本框中

时间:2013-09-24 23:41:15

标签: c# string split ip

string ip = ini.IniReadValue("Settings", "ip");
string[] ip2 = ip.Split('.');
foreach (var part in ip2)
{
    textBox3.Text = part[0].ToString();
    textBox4.Text = part[1].ToString();
    textBox5.Text = part[2].ToString();
    textBox6.Text = part[3].ToString();
}

大家好,我的问题是textBox3里面只有1个,我希望它有123个 为了记录,ip = 123.456.789.101用于测试目的。

这是结果: result

当它设置textBox6时它也会崩溃:索引超出了数组的范围。

4 个答案:

答案 0 :(得分:3)

让我们手动追踪您的代码:

  1. ip2包含数组{"123", "456", "789", "101"}
  2. 然后,您在foreach循环中迭代数组,因此part成为每个字符串"123""456""789",{{ 1}}反过来。
  3. 然后您将索引到字符串(带方括号),该字符串访问字符串中的各个"101"。所以在第一次循环中,
    • charpart[0]
    • '1'part[1]
    • '2'part[2]
    • '3'超出了字符串的范围(length = 3)。
  4. 请注意,您需要致电part[3]也是一个很好的指标。

    相反,你想要(没有ToString()循环),

    foreach

答案 1 :(得分:1)

你的逻辑错误。

foreach循环的每次迭代都是整个字符串。因此,当您这样做时:

part[NUMBER_HERE]

..您正在访问该字符串的索引处的单个字符。

您获得的IndexOutOfBounds错误是因为我上面所说的。如果访问长度为3(索引0,1和2)的字符串索引3处的字符,则它将超出范围。

你根本不想要一个循环。将您的代码更改为:

string[] parts = ip.Split('.');
textBox3.Text = parts[0].ToString();
textBox4.Text = parts[1].ToString();
textBox5.Text = parts[2].ToString();
textBox6.Text = parts[3].ToString();

现在你有一个正在索引的实际字符串数组..而不是一个字符串。

答案 2 :(得分:1)

删除foreach循环。

此行创建一个数组,其中包含新插槽中的每个值。

string[] ip2 = ip.Split('.'); 

然而,这会在数组中获取每个单独的值并访问其第n个插槽。

foreach (var part in ip2){
     textBox3.Text = part[0].ToString();
     textBox4.Text = part[1].ToString();
     textBox5.Text = part[2].ToString();
     textBox6.Text = part[3].ToString();
}

它将使用给定位置上的字符(由索引确定)覆盖您的数据。最后一个条目为101,这就是文本框中的最后一个值为101的原因。 只需删除循环就可以了。

答案 3 :(得分:0)

这是因为你正在迭代分裂的第一个结果。数组ip2包含拆分的结果(即ip2 [0] =“123”)。但是你写part[0],因为part包含了拆分的第一个结果(无论如何在第一次迭代中),part [0]现在意味着“123”中的第一个字符,当然是“1”。这是你需要做的:

string ip = ini.IniReadValue("Settings", "ip");
string[] ip2 = ip.Split('.');

textBox3.Text = ip2[0].ToString();
textBox4.Text = ip2[1].ToString();
textBox5.Text = ip2[2].ToString();
textBox6.Text = ip2[3].ToString();

理想情况下,在将文本分配给文本框之前,您需要检查分割是否返回了足够的结果。