Я пытаюсь с if (nuevo_precio.getText().matches("/^\\d+$/"))
, но пока не получил хороших результатов...
Что такое регулярное выражение Java для целых чисел с целыми числами?
Ответ 1
В Java regex вы не используете разделители /
:
nuevo_precio.getText().matches("^\\d+$")
Так как String.matches()
(или Matcher.matcher()
) вынуждает всю строку соответствовать шаблону для возврата true
, ^
и $
на самом деле избыточны и могут быть удалены без влияния на результат. Это немного отличается от JavaScript, PHP (PCRE) или Perl, где "match" означает поиск подстроки в целевой строке, которая соответствует шаблону.
nuevo_precio.getText().matches("\\d+") // Equivalent solution
Это не помешает оставить его там, поскольку это означает намерение и делает регулярное выражение более переносимым.
Чтобы ограничить точно 4-значное число:
"\\d{4}"
Ответ 2
Как уже говорили другие, Java не использует разделители. Строка, которую вы пытаетесь сопоставить, не нуждается в конечных слешах, поэтому вместо /^\\d+$/
ваша строка должна была быть ^\\d+$
.
Теперь я знаю, что это старый вопрос, но большинство людей здесь забыли что-то очень важное. Правильное регулярное выражение для целых чисел:
^-?\d+$
Разбивая это:
^ String start metacharacter (Not required if using matches() - read below)
-? Matches the minus character (Optional)
\d+ Matches 1 or more digit characters
$ String end metacharacter (Not required if using matches() - read below)
Конечно, в Java вам понадобится двойной обратный слеш вместо обычного обратного слэша, поэтому строка Java, которая соответствует приведенному выше регулярному выражению, равна ^-?\\d+$
ПРИМЕЧАНИЕ: символы ^$
(начало/конец строки) не нужны, если вы используете .matches()
:
Добро пожаловать в Java метод
.matches()
неправильным.matches()
... Он пытается и соответствует ВСЕМ входным данным. К сожалению, другие языки последовали примеру :(- взято из этого ответа
В любом случае регулярное выражение будет работать с ^$
. Несмотря на то, что это необязательно, я по-прежнему включаю его для удобства чтения регулярных выражений, как и в любом другом случае, когда вы не соответствуете всей строке по умолчанию (что чаще всего происходит, если вы не используете .matches()
), вы ' буду использовать эти символы
Чтобы соответствовать противоположности:
^\D+$
\D
- это все, что не является цифрой. \D
(не цифры) отрицает \d
(цифры).
Целочисленное регулярное выражение на регулярное выражение101
Обратите внимание, что это только для целых чисел. Регулярное выражение для двойников:
^-?\d+(\.\d+)?$
Разбивая это:
^ String start metacharacter (Not required if using matches())
-? Matches the minus character. The ? sign makes the minus character optional.
\d+ Matches 1 or more digit characters
( Start capturing group
\.\d+ A literal dot followed by one or more digits
)? End capturing group. The ? sign makes the whole group optional.
$ String end metacharacter (Not required if using matches())
Конечно это в Java вместо \d
и \.
у вас будет двойная обратная косая черта, как в приведенном выше примере.
Ответ 3
Java не использует слэши для разграничения регулярных выражений.
.matches("\\d+")
Должно это сделать.
FYI метод String.matches()
должен соответствовать всему вводу для возврата true
.
Даже в таких языках, как perl, косые черты не являются частью регулярного выражения; они являются разделителями - часть, если код приложения, не имеет никакого отношения к регулярному выражению
Ответ 4
Вы также можете обратиться за отрицанием, чтобы проверить, является ли число чистым числом или нет.
Pattern pattern = Pattern.compile(".*[^0-9].*");
for(String input: inputs){
System.out.println( "Is " + input + " a number : "
+ !pattern.matcher(input).matches());
}
Ответ 5
Regex работает только для чисел, а не целых чисел:
Integer.MAX_VALUE
Ответ 6
public static void main(String[] args) {
//regex is made to allow all the characters like a,b,...z,A,B,.....Z and
//also numbers from 0-9.
String regex = "[a-zA-z0-9]*";
String stringName="paul123";
//pattern compiled
Pattern pattern = Pattern.compile(regex);
String s = stringName.trim();
Matcher matcher = pattern.matcher(s);
System.out.println(matcher.matches());
}