C#中处理字符串和数字

在CSDN上有人问:C#中有没有咬定三个string类型变量是不是为数字类型的系统函数(如vb中的IsNumeric(s))?

答案自然是从未有过的。有人建议用int.Parse(string)的章程,然后通过捕获极度来判断再次回到的值。更好的艺术是用正则表明式:
public int IsNumeric(string str)
{
      int i;
      if(str != null && Regex.IsMatch(str,@”^\d+$”))
                i = int.Parse(str);
      else
                i = -1;
       return i;
}

那应当是个好法子。但是假如要提议更高的须求,例如不仅要一口咬定字符串是不是全为数字,还要在认清后,须要将其举行转换。那么上述函数就有通病,因为在地点的正则表明式中无法断定‘-’符号。因而地点的函数只可以转换非负数。尤有甚者,供给撤换的不单是整数,还包含浮点数,尤其是科学计数法的字符串,例如:string
s = “-3.14159E+10”

那当中的’E’、’.’、’+’等字符,都以比较非凡的,而且还须要它们出现的地方要适合浮点数或不利计数方法的规定。那么就不能够利用正则表达式了,至少很费劲(作者是那样认为的,也许有好的方法)。难点可能回到最初的化解方案,便是行使Parse()方法和破获至极。以下是落实此意义的点子:
public bool IsNumeric(string s, out double result)
{
   bool bReturn = true;
   try
   {
       result = double.Parse(s);
   }
   catch
   {
       result = 0;
       bReturn = false;
   }
   return bReturn;     
}
譬如调用:

string s1=”abc”;
string s2=”-3.14159E+10″;
double d1,d2;
bool ty1 = IsNumeric(s1,out d1);
bool ty2 = IsNumeric(s2,out d2);
结果:
ty1=false;d1=0;
ty2=true;d2=31415900000

评释:因为涉及到浮点数,就不可能使用-1来做为出现谬误的重临值,如前方的例证。也便是说本方法有八个重回值,2个是判定转换是还是不是中标,为bool型;另二个是更换到功后的浮点数值。笔者用out来消除该难点。

本办法仍旧适合整型,只需对重返值进行强制转换即可。

相关文章