循环遍历只保留数字和小数点的字符串
本文关键字:小数点 字符串 数字 遍历 保留 循环 | 更新日期: 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