我如何检测文本框中的空格,以便稍后将用户在C# winforms文本框中输入的所有数字相加?

xqnpmsa8  于 2023-02-16  发布在  C#
关注(0)|答案(5)|浏览(186)

我想做一个小程序,让人们把他们的婚礼费用用空格隔开,然后把总数返回给他们。这是用C#winforms编写的。
代码:

string expenses = txEntrada.Text;
int add = 0;
string space = "";
for (int i = 0; i < expenses.Length; i++)
{
    string substring = expenses.Substring(i, 1);
    if (substring == space)
    {
        i++;
    }
    else
    {
        add += int.Parse(substring);
    }
}
txSortida.Text = add.ToString();
6mw9ycah

6mw9ycah1#

我的建议是这样的:

txSortida.Text = txEntrada
  .Text
  .Split(' ', StringSplitOptions.RemoveEmptyEntries)
  .Sum(item => decimal.TryParse(item, out var cost) ? cost : 0.00m)
  .ToString("c2");

在这里我们
1.用空格' '分割输入并删除空条目,以便允许像" 123 456 "输入那样的 * 前导 尾随 * 和 * 双 * 空格。
1.我们对解析后的值求和(因为我们使用现金,所以decimal通常是最佳选择;如果您坚持使用int,请使用int.TryParse);如果值的格式错误,我们 * 忽略它 *(添加0m),即"123 bla-bla-bla" 456 => 123 + 456 == 579
1.最后,我们将结果格式化为某种货币格式(我选择了c2

xmq68pz9

xmq68pz92#

这就是你所需要的:

txSortida.Text =
    txEntrada
        .Text
        .Split(' ', StringSplitOptions.RemoveEmptyEntries)
        .Select(x => int.Parse(x))
        .Sum()
        .ToString();
7xzttuei

7xzttuei3#

为了使这个方法更健壮,并且在用户输入额外的空格或非数字字符时不会崩溃,我建议对int使用TryParse方法。因此,首先您将使用Split方法拆分字符串,使用RemoveEmptyEntries选项。然后使用TryParse方法遍历该数组,只有在解析成功时才添加值。

private void calculateSum()
{
    int sum = 0;
    string[] values = txEntrada.Text.Split(' ', StringSplitOptions.RemoveEmptyEntries);
    List<string> goodValues = new List<string>();
    foreach (var entry in values)
    {
        if(int.TryParse(entry, out int value))
        {
            sum += value; 
            goodValues.Add(entry);
        }
    }
    txSortida.Text = sum.ToString();
    txEntrada.Text = string.Join(" ", goodValues);
    BeginInvoke(new Action(() => txEntrada.SelectAll()));
}
pprl5pva

pprl5pva4#

你可以使用expenses.Split将字符串转换为基于空格的数组,并且属性StringSplitOptions.RemoveEmptyEntries删除数组中的Empty。然后使用Sum(x => Convert.ToInt32(x))将数组求和为一个数字

int add = 0;
 string expenses = txEntrada.Text;
 txSortida.Text =  expenses.Split(new char[] { ' ' }, 
                            StringSplitOptions.RemoveEmptyEntries)
                  .Sum(x => Convert.ToInt32(x));
p4tfgftt

p4tfgftt5#

可以使用名称空间System.Text.RegularExpressions中的类Regex将输入字符串拆分为标记(每个标记都是表达式中的一个项,作为字符串)。
然后将每个标记转换为int并将它们相加。
代码示例:

using System;
using System.Text.RegularExpressions;
//...

// Split into tokens:
string[] tokens = Regex.Split(expenses, " +");   // use + to inidcate one or more spaces between tokens.

// Sum up the values:
int sum = 0;
foreach (string token in tokens)
{
    if (int.TryParse(token, out int val)) 
    { 
        sum += val; 
    }
    else 
    { 
        // Handle error ...
    }
}

Console.WriteLine(sum);

输出:

321

在计算sum后的实际代码中,可以使用:

txSortida.Text = sum.ToString();

相关问题