2014-07-09 8 views
0

Я хочу проверить, является ли строка положительным натуральным числом, но я не хочу использовать Integer.parseInt(), потому что пользователь может ввести число, большее, чем int. Вместо этого я предпочел бы использовать регулярное выражение для возврата false, если числовая строка содержит все символы «0».Регулярное выражение, чтобы проверить, является ли строка положительным натуральным числом

if(val.matches("[0-9]+")){ 
    // We know that it will be a number, but what if it is "000"? 
    // what should I change to make sure 
    // "At Least 1 character in the String is from 1-9" 
} 

Примечание: строка должна содержать только 0 - 9 и она не должна содержать все 0 с; другими словами, он должен иметь не менее 1 символа в [1-9].

+1

Можете ли вы уточнить, что вы подразумеваете под «положительным числом»? Является ли '2.5' положительным числом? Как насчет 'π'? –

+0

обновлено -> положительное натуральное число – Tum

ответ

6

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

\d*[1-9]\d* 

Regular expression visualization

Debuggex Demo

модульных тестов Debugex кажутся немного глючит, но вы можете играть с рисунком там. Это достаточно просто, что он должен быть совместим с несколькими языками, но на Java вам нужно будет его избежать.

Pattern positiveNumber = Pattern.compile("\\d*[1-9]\\d*"); 

Примечание выше (намеренно) соответствует строкам, мы обычно не считают «положительные натуральные числа», так как действительная строка может начинаться с одной или несколькими 0 с, например 000123. Если вы не хотите сопоставлять такие строки, вы можете упростить шаблон дальше.

[1-9]\d*  

Regular expression visualization

Debuggex Demo

Pattern exactPositiveNumber = Pattern.compile("[1-9]\\d*"); 
+0

мне нужно "\\"? – Tum

+0

Будет ли это работать для «0»? –

+0

@AlexandreSantos Это регулярное выражение отклоняет «0», поэтому оно работает. –

2

Если вы хотите, чтобы соответствовать положительные натуральные числа, написанные стандартным способом, без ведущего нуля, регулярное выражение, которое вы хотите,

[1-9]\d* 

, который соответствует любой строке символов consis ting только цифр, где первая цифра не равна нулю. Не забудьте удвоить обратную косую черту ("[1-9]\\d*"), если вы напишете ее как литерал Java String.

Смежные вопросы