2012-04-15 4 views
4

Я имею в виду:Как проверить, является ли строка положительным целым?

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

как я могу сделать это быстрее в C#?

+2

целое положительное число в каком диапазоне? (Что он должен делать для значений, больших, чем 'int.MaxValue' или' int.LongValue'?) Имеются ли ведущие пробелы? Как насчет знака «впереди»? –

+1

О, а как насчет 0? Вы действительно имели в виду * позитивный * или неотрицательный? –

+0

Как насчет '1.0'? –

ответ

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

Почему бы не 'uint.TryParse (str, out x)' вместо этого? я могу представить, что он также более эффективен, так как он не должен проверять на '-' – Firo

+0

Я думаю, что ему нужно немного больше объяснений (вместо написания кода). –

5

Альтернатива фактически разбор это проверить, если строка не является пустой и только содержит цифры, необязательно с ведущим + знаком, если вы хотите, чтобы позволить.

Обратите внимание, что это не будет выполнять проверку диапазона - так что 999999999999999999999999999999999999 будет действительным, хотя он не будет вписываться в int или long.

Вы можете использовать регулярное выражение для этого, или, возможно, LINQ:

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

(. Это похоже на Char.IsDigit подход Guffa, но ограничивает себя ASCII цифр Есть множество не-ASCII цифр в Unicode.)

Обратите внимание, что это приведет к ограничению его неотрицательных ценности - не просто положительных значения. Как вы хотите лечить «0» и «0000»?

8

Вы можете проверить, если он содержит только цифры:

if (theString.All(Char.IsDigit)) 
Смежные вопросы