如何检查一个字符串是否为正整数?

7

I mean :

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

如何在C#中更快地完成此操作?


2
正整数的范围是多少?(对于大于 int.MaxValueint.LongValue 的值应该怎么处理?)前导空格是否有效?前导加号呢? - Jon Skeet
1
哦,那么0呢?你真的指的是“正数”,还是“非负数”? - Jon Skeet
3个回答

19
int x;
if (int.TryParse(str, out x) && x > 0)

1
为什么不使用uint.TryParse(str, out x)呢?我可以想象这样做也更有效率,因为它不需要检查“-”。 - Firo
1
我认为需要更多的解释(而不是编写代码)。 - Asif Mehmood

9
您可以检查它是否只包含数字:
if (theString.All(Char.IsDigit))

5

除了实际解析字符串之外,另一种方法是检查该字符串是否非空且仅包含数字,如果需要,可以带有前导的+符号以允许它。

请注意,这种方法不会执行任何范围检查 - 因此,即使9999999999999999999999999999999999不能适合intlong 中,它仍然有效。

您可以使用正则表达式或可能使用 LINQ 来实现:

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

(这类似于 Guffa的 Char.IsDigit 方法,但限制为 ASCII 数字。Unicode 中有许多非 ASCII 数字。)
请注意,这将限制为非负值-不仅仅是正值。您想如何处理“0”和“0000”?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接