循环遍历只保留数字和小数点的字符串

本文关键字:小数点 字符串 数字 遍历 保留 循环 | 更新日期: 2023-09-27 18:19:06

在阅读了类似问题的答案后,我想到了以下方法来测试文本框中的数字内容。

我现在的问题是:我的解决方案是否尽可能简单?

 internal static string testStringForNumber(string v)
    {
        // example: string strToTest = Data.CommonMethods.testStringForNumber(this.amountTextBox.Text.Trim());
        string returnValue = "";
        string chr = "";
        int nLen = v.Length;
        int i = 0; // this is my counter
        while (i < nLen)
        {
            chr = v.Substring(i, 1);
            switch (chr)
            {
                case ".":
                    returnValue = returnValue + chr;
                    break;
                case "0":
                    returnValue = returnValue + chr;
                    break;
                case "9":
                    returnValue = returnValue + chr;
                    break;
                case "8":
                    returnValue = returnValue + chr;
                    break;
                case "7":
                    returnValue = returnValue + chr;
                    break;
                case "6":
                    returnValue = returnValue + chr;
                    break;
                case "5":
                    returnValue = returnValue + chr;
                    break;
                case "4":
                    returnValue = returnValue + chr;
                    break;
                case "3":
                    returnValue = returnValue + chr;
                    break;
                case "2":
                    returnValue = returnValue + chr;
                    break;
                case "1":
                    returnValue = returnValue + chr;
                    break;
            }
            i = i + 1;
        }

        return returnValue;
    }

循环遍历只保留数字和小数点的字符串

我个人会使用正则表达式。

string newString = Regex.Replace(strToTest,@"[^'d.]","");
当然,我不知道你为什么要这样做。比如"测试23。测试42。"将返回字符串23.42.

它不是,我将在这里给出一行代码,但是我推荐StringBuilder用于代码维护。

public string NumbersAndDecimalPoints(string input)
{
  return new string(input.ToCharArray().Where(t => char.IsDigit(t) || t == '.').ToArray());
}

如果字符串是你想要的。否则,您也可以将其解析为数字。

return decimal.Parse(NumbersAndDecimalsPoints(v));

另一方面,如果任务是找出字符串是否是有效数字,我要么使用@Steve并使用Any(),要么只是尝试解析它。

使用Any()(它不会捕获多个分隔符):

var isNumber = !input.ToCharArray().Any(c => "1234567890.".IndexOf(c) < 0);

使用TryParse()(真的是最好的方法):

var number = 0m;
var isNumber = decimal.TryParse(input, out number); // is number true = is valid number