C#Split Number&字符串

时间:2013-09-27 15:37:05

标签: c# regex

我正在尝试拆分数字和字符串并将它们放在文本框中(仅限数字)

我能够做到这一点,但我只在文本框中获得Last值。它可能很简单但是因为我是C#的新手...... 所以我想要做的是在不同的文本框上获取两个值。 8 on one& 17对另一个。

 string Stack = "azersdj8qsdfqzer17";

        string[] digits = Regex.Split(Stack, @"\D+");

        foreach (string value in digits)
        {

            int number;
            if (int.TryParse(value, out number))
            {
                textoutput.Text = value.ToString();
            }
        }

5 个答案:

答案 0 :(得分:4)

textoutput.Text = value.ToString();

此行将使用该值覆盖textoutput的文本值。如果您希望在一个文本框中使用所有数字:

textoutput.Text += value.ToString();

这会将下一个值添加到文本框而不是覆盖。

如果您希望数字位于不同的文本框中,则不能只将值添加到textoutput。您需要if语句或其他东西来交换用于显示数字的文本框。

答案 1 :(得分:3)

您需要将字符串分配给两个TextBox而不是循环中的一个。

string[] digits = Regex.Split(Stack, @"\D+")
    .Where(s => !string.IsNullOrWhiteSpace(s)).ToArray();
textoutput1.Text = digits[0];
textoutput2.Text = digits.ElementAtOrdefault(1);

答案 2 :(得分:0)

修改textoutput.Text = value.ToString();声明。

textoutput.Text += value.ToString(); // It will show all numbers present in string

textoutput.Text = value.ToString();  // This will only show the last number in string

您的代码中的问题是您正在为Textbox的text属性分配编号,该编号被最后一个值覆盖,因此您应该连接它以显示所有数字。

答案 3 :(得分:0)

根据评论,总有两个数字,所以不需要循环,因为你没有附加到同一个文本框。

textoutput.Text = digits[0].ToString();
secondtextoutput.Text = digits[1].ToString();

要使其为任意数量的数字,您可以遍历TextBoxes。例如,您可以在列表中添加所有TextBox。

List<TextBox> myTextBoxes = new List<TextBox>();
myTextBoxes.Add(myTB1);
myTextBoxes.Add(myTB2);
//...

然后遍历数字并在上面创建的TextBox列表中使用相同的索引。

for(int i = 0; i < digits.Length; i++)
{  
   myTextBoxes[i].Text = digits[i].ToString();
}  

您可以添加错误处理(例如,如果TextBox的数量小于数字位数),但这将是向不同TextBox添加值的一种方法。

答案 4 :(得分:0)

现在,您有一个for循环,并且您只使用您的值设置了一个文本框。有很多方法可以解决这个问题。这是我的建议,假设您的第二个文本框名为textoutput2 :(我正在考虑Tim Schmelter的想法,即不使用TryParse,获取int,然后将其转换为字符串。)

string Stack = "azersdj8qsdfqzer17";
string[] digits = Regex.Split(Stack, @"\D+");

textoutput.Text = "replace";
textoutput2.Text = "replace";

foreach (string value in digits)
{
    if (textoutput.Text == "replace") { 
        textoutput.Text = value;
    } else {
        textoutput2.Text = value;
    }
}

这仍然有点糟糕,因为它设置了第一个的文本,然后对于找到的所有其他数字,它只设置第二个,但您可以轻松地将其扩展到任意数量的文本框你有,例如有3个盒子:

string Stack = "azersdj8qsdfqzer17";
string[] digits = Regex.Split(Stack, @"\D+");

textoutput.Text = "replace";
textoutput2.Text = "replace";
textoutput3.Text = "replace";

foreach (string value in digits)
{
    if (textoutput.Text == "replace") { 
        textoutput.Text = value;
    } else if (textoutput2.Text == "replace") {
        textoutput2.Text = value;
    } else {
        textoutput3.Text = value;
    }
}

还有其他方法可以实现,包括文本框数组或动态创建的文本框,但这是一个基本的开始。