Java - регулярное выражение для соответствия любому целому числу - PullRequest
3 голосов
/ 04 октября 2011

У меня проблема с регулярным выражением, которое соответствует строке с любым целым числом.

Вот что у меня есть:

if(quantityDesired.matches("\b\d+\b")){.......}

Но Затмение дает мне:

Invalid escape sequence (valid ones are  \b  \t  \n  \f  \r  \"  \'  \\ )

Я просматривал другие подобные вопросы и пытался использовать двойную обратную косую черту, но это не работает. Предложения?

Ответы [ 3 ]

4 голосов
/ 04 октября 2011

Вам нужно необходимо избежать обратной косой черты в строковых литералах Java:

"\\b\\d+\\b"

Это, конечно, соответствует только положительным целым числам, но не любому целое число, как вы сказали в своем вопросе.Это было ваше намерение?

Я просматривал другие подобные вопросы и пытался использовать двойную обратную косую черту, но это не работает.

Тогда у вас должна быть еще одна ошибка.Я думаю, проблема в том, что вы хотите использовать Matcher.find вместо matches.Первый выполняет поиск шаблона в любом месте строки, тогда как последний соответствует, только если строка whole соответствует шаблону.Вот пример того, как использовать Matcher.find:

Pattern pattern = Pattern.compile("\\b\\d+\\b");
Matcher matcher = pattern.matcher(quantityDesired);
if (matcher.find()) { ... }

Примечание

Если вы действительно хотите сопоставить всю строку, то вам не нужноanchors:

if (quantityDesired.matches("\\d+")) {.......}

И если вы хотите принимать только целые числа, которые вписываются в тип Java int, вы должны использовать Integer.parseInt как Сейфюлислам упомянул , а не анализировать его самостоятельно.

2 голосов
/ 04 октября 2011

Вместо регулярного выражения вы можете заглянуть в Apache Commons Lang StringUtils.isNumeric

1 голос
/ 04 октября 2011

Почему вы не предпочитаете Integer.parseInt () метод?Он делает то, что вы хотите, и он более читабелен.

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