我知道几种方法来检查这个。正则表达式、int.parse
、tryparse
、循环。
谁能告诉我检查最快的方法是什么?
需要的是只对进行检查,不需要实际解析。
这与以下问题不同:How do I identify if a string is a number?
问题不仅仅是如何识别。但是关于什么是最快的方法。
发布于 2011-09-18 19:13:55
bool IsDigitsOnly(string str)
{
foreach (char c in str)
{
if (c < '0' || c > '9')
return false;
}
return true;
}
可能是最快的方法。
发布于 2016-08-31 18:35:56
您可以简单地使用LINQ来完成此操作
return str.All(char.IsDigit);
对于空字符串,
.All
返回true,对于所有Unicode字符,如果strings.char.IsDigit
为空,则返回exception。发布于 2011-09-18 19:13:57
以下是基于同一字符串的1000000次解析的一些基准测试:
更新了release
统计信息:
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确实允许前导/尾随空格以及特定于文化的符号。它也受到字符串长度的限制。
https://stackoverflow.com/questions/7461080
复制相似问题