Неверный формат для чисел в Java - PullRequest
0 голосов
/ 22 мая 2018

Я использую следующий код, поэтому, когда пользователь вводит алфавит или специальный символ в числовое поле, он должен отображать ошибку как недопустимый формат.Когда я запускаю его, даже для чисел, он отображается как недопустимый формат.Может ли кто-нибудь исправить это?

if (!("[a-zA-Z_]+").equals(session.getObject("CLASSID")) || 
    !(" [!~`@#$]") .equals(session.getObject("CLASSID")))
{
    session.setStatusMessage("Invalid format");
    throw new AbortHandlerException();
}

1 Ответ

0 голосов
/ 22 мая 2018

Если я правильно понимаю, я думаю, что вы путаете сравнение с регулярным выражением с равенством строк Java.Ваш код выше проверяет, равна ли строка из сеанса шаблону.Насколько я понимаю, вы пытаетесь определить, содержит ли строка число или нет?

Существует несколько способов сделать это.Одним из таких методов является использование соответствия регулярному выражению \d.Или Guava lib com.google.common.base.CharMatcher#digit

Или просто попробуйте разобрать номер и поймать java.text.ParseException, если он не удался.Последний может широко рассматриваться как плохая практика, поскольку это анти-паттерн, известный как использование исключений для управления потоком.

Вот несколько примеров:

Гуава

CharMatcher.inRange('0', '9').matchesAllOf("A string");

Regex

final Matcher matcher = Pattern.compile("\\d+").matcher("0292");
    if (matcher.matches()) {
        // contains number
    } else {
        // no number.
    }

Двойная обратная косая черта состоит в том, чтобы экранировать символ \ в Java.

Конечно, есть и другие базовые примеры, как указывали другие участники до меня, такие как обычный старый Integer.parse, Long.parse, new BigInteger("") Просто не забудьте еще раз перехватить исключения в случае ошибки разбора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...