2012-04-15 38 views
4

我的意思是:如何检查字符串是否为正整数?

1231 YES 
121.1241 NO 
121,1241 NO 
-121 NO 
124a NO 

我怎么能做到这一点在C#中更快吗?

+2

正整数? (对于大于“int.MaxValue”或“int.LongValue”的值,它应该做什么?)前导空格是否有效?领先+符号怎么样? – 2012-04-15 13:05:41

+1

哦,那么0呢?你真的意味着*积极*还是非消极? – 2012-04-15 13:08:00

+0

'1.0'呢? – 2012-04-15 14:25:19

回答

16
int x; 
if (int.TryParse(str, out x) && x > 0) 
+1

为什么不'uint.TryParse(str,out x)'而不是?我可以想象,它也更有效,因为它不需要检查'-' – Firo 2012-04-16 06:57:08

+0

我认为它需要更多的解释(而不是编写代码)。 – 2017-02-23 06:00:23

5

另一种实际解析这是检查是否要允许该字符串非空和只有包含数字,任选一家领先的+迹象。

请注意,这不会执行任何范围检查 - 因此9999999999999999999999999999999999将是有效的,即使它不适合intlong

你可以使用一个正则表达式,或者可能LINQ:

var nonNegative = text.Length > 0 && text.All(c => c >= '0' && c <= '9'); 

(这类似于Guffa的Char.IsDigit做法,但限制本身ASCII数字有Unicode中许多非ASCII数字)。

注意,这将其限制在非负值 - 不只是积极值。你会如何处理“0”和“0000”?

8

您可以检查它是否只包含数字:在什么范围内

if (theString.All(Char.IsDigit))