我知道一些方法来检查字符串是否只包含数字: 正则表达式,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不同,因为这个问题不仅是关于如何识别,而且是关于识别的最快方法是什么。
当前回答
该字符已经有一个IsDigit(char c),它是这样做的:
public static bool IsDigit(char c)
{
if (!char.IsLatin1(c))
return CharUnicodeInfo.GetUnicodeCategory(c) == UnicodeCategory.DecimalDigitNumber;
if ((int) c >= 48)
return (int) c <= 57;
else
return false;
}
你可以简单地这样做:
var theString = "839278";
bool digitsOnly = theString.All(char.IsDigit);
其他回答
另一种方法!
string str = "12345";
bool containsOnlyDigits = true;
try { if(Convert.ToInt32(str) < 0){ containsOnlyDigits = false; } }
catch { containsOnlyDigits = false; }
在这里,如果Convert.ToInt32(str)语句失败,则字符串不仅仅包含数字。另一种可能性是,如果字符串具有“-12345”,并成功转换为-12345,则会检查转换后的数字是否小于零。
这应该可以工作:
Regex.IsMatch("124", "^[0-9]+$", RegexOptions.Compiled)
int。解析或int。TryParse并不总是有效,因为字符串可能包含int类型所能容纳的更多数字。
如果你要做这个检查不止一次,使用一个编译过的正则表达式是有用的——第一次会花费更多的时间,但之后会更快。
你可以在一行LINQ语句中做到这一点。好吧,我知道这不一定是最快的,所以从技术上讲并没有回答这个问题,但它可能是最容易写的:
str.All(c => c >= '0' && c <= '9')
函数的空验证:
public static bool IsDigitsOnly(string str)
{
return !string.IsNullOrEmpty(str) && str.All(char.IsDigit);
}
试试下面的代码:
bool isDigitsOnly(string str)
{
try
{
int number = Convert.ToInt32(str);
return true;
}
catch (Exception)
{
return false;
}
}