我知道一些方法来检查字符串是否只包含数字: 正则表达式,int。解析,tryparse,循环等等。
谁能告诉我最快的方法是什么?
我只需要检查值,不需要实际解析它。
通过“数字”,我是指具体的ASCII数字:0 1 2 3 4 5 6 7 8 9。
如果字符串是数字,这个问题与Identify不同,因为这个问题不仅是关于如何识别,而且是关于识别的最快方法是什么。
我知道一些方法来检查字符串是否只包含数字: 正则表达式,int。解析,tryparse,循环等等。
谁能告诉我最快的方法是什么?
我只需要检查值,不需要实际解析它。
通过“数字”,我是指具体的ASCII数字:0 1 2 3 4 5 6 7 8 9。
如果字符串是数字,这个问题与Identify不同,因为这个问题不仅是关于如何识别,而且是关于识别的最快方法是什么。
当前回答
非常聪明和简单的方法来检测你的字符串是否只包含数字是这样的:
string s = "12fg";
if(s.All(char.IsDigit))
{
return true; // contains only digits
}
else
{
return false; // contains not only digits
}
其他回答
那么char.IsDigit(myChar)呢?
public bool CheckforDigits(string x)
{
int tr;
return x.All(r=> int.TryParse(r.ToString(), out tr));
}
非常聪明和简单的方法来检测你的字符串是否只包含数字是这样的:
string s = "12fg";
if(s.All(char.IsDigit))
{
return true; // contains only digits
}
else
{
return false; // contains not only digits
}
下面是一些基于相同字符串的1000000次解析的基准测试:
更新发布数据:
IsDigitsOnly: 384588
TryParse: 639583
Regex: 1329571
下面是代码,看起来IsDigitsOnly更快:
class Program
{
private static Regex regex = new Regex("^[0-9]+$", RegexOptions.Compiled);
static void Main(string[] args)
{
Stopwatch watch = new Stopwatch();
string test = int.MaxValue.ToString();
int value;
watch.Start();
for(int i=0; i< 1000000; i++)
{
int.TryParse(test, out value);
}
watch.Stop();
Console.WriteLine("TryParse: "+watch.ElapsedTicks);
watch.Reset();
watch.Start();
for (int i = 0; i < 1000000; i++)
{
IsDigitsOnly(test);
}
watch.Stop();
Console.WriteLine("IsDigitsOnly: " + watch.ElapsedTicks);
watch.Reset();
watch.Start();
for (int i = 0; i < 1000000; i++)
{
regex.IsMatch(test);
}
watch.Stop();
Console.WriteLine("Regex: " + watch.ElapsedTicks);
Console.ReadLine();
}
static bool IsDigitsOnly(string str)
{
foreach (char c in str)
{
if (c < '0' || c > '9')
return false;
}
return true;
}
}
当然值得注意的是,TryParse确实允许前导/尾随空白以及区域性特定的符号。弦的长度也有限制。
bool IsDigitsOnly(string str)
{
foreach (char c in str)
{
if (c < '0' || c > '9')
return false;
}
return true;
}
这可能是最快的方法了。