Проблемы с Regex в Java - PullRequest
       1

Проблемы с Regex в Java

1 голос
/ 19 апреля 2020

В моем текущем проекте я сталкиваюсь с проблемой наличия строки, которая может быть построена в 2 образцах. Он состоит только из одного натурального числа или двух натуральных чисел с «-» между ними. Мне нужно уметь различать guish между ними. Я хотел бы использовать следующий код для этого:

if (STRING.matches("*-*"))
{
    //Do something
} else {
    //Do something else
}

Однако, это дает мне следующую ошибку:

Исключение в потоке "Thread-2" java. util.regex.PatternSyntaxException: висячий метасимвол '*' рядом с индексом 0

Я также пытался поставить '#' в начале строки (конечно, я добавил его в шаблон), но это только вызвало выполнение части else if-запроса.

Надеюсь, вы мне поможете

isi_ko

1 Ответ

3 голосов
/ 19 апреля 2020

Ваше регулярное выражение неверно, потому что звездочка - это метасимвол, для которого нужен шаблон перед ним. Вы можете попробовать что-то вроде этого:

if (STRING.matches("[^-]*-[^-]*"))
{
    //Do something
} else {
    //Do something else
}

Лучше, вероятно, использовать String # split ("-") и поместить это в массив. Затем вы можете проверить длину этого массива, чтобы увидеть, сколько там чисел, а затем использовать Integer.parseInt для каждой подстроки, чтобы получить натуральное число.

Другой способ - использовать Matcher для поиска нескольких групп. Если (\d)* является регулярным выражением, совпадающим с натуральным числом, вы можете сделать это:

Pattern pattern = Pattern.compile("(\\d)*");
Matcher matcher = pattern.matcher(input);
matcher.find();
String first = matcher.group();
if (matcher.find()) {
  String second = matcher.group(); //this means there are two numbers
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...