Регулярное выражение двухзначного числа

Всем привет. Пишу код, который принимает с клавиатуры на вход массив чисел, запрашивать размер скидки, номер позиции и количество позиций. Дальше сделал регулярное выражение на проверку введенных символов, что это число. "[0-9]+[0-9]*". Число может быть равно 0, но не может быть равно 01, 02 или подобное. Моя регулярка работает неправильно, так как принимает 02, например. Оно должно пропускать числа от 1 до бесконечности и если число равно 0


Ответы (1 шт):

Автор решения: Nowhere Man

Если действительно нужна регулярка для проверки чисел без нулей слева, следует проверить строку на единственный 0 ИЛИ на [1-9], после которых идут 0 или больше цифр:

private static boolean numberWithoutLeadingZeros(String num) {
    return num != null && num.matches("0|[1-9]\\d*");
}

Оно должно пропускать числа от 1 до бесконечности и если число равно 0

Требование насчёт бесконечности строго говоря невыполнимо, так как исходная строка (класс String) или теоретически бесконечное число типа BigInteger используют массивы, размер которых ограничен, не говоря уже о примитивных целочисленных типах int / long, занимающих 4 / 8 байт соответственно.

→ Ссылка