ответ этого кода будет ложным для каждого ввода, является ли оно правильным или неправильным - PullRequest
1 голос
/ 23 июня 2019

Я хочу, чтобы вывод regex имел значение false для неправильного ввода и true для правильного ввода, но на выходе отображается только false. Это программа Java Regex из «Создать регулярное выражение, которое принимает 10-значные числовые символы начиная только с 7, 8 или 9 ".

Это код jdk 1.8.0

public static void main(String args[])
{
    String st="";
    Scanner sc=new Scanner(System.in);
    st=sc.nextLine();
    boolean result=Pattern.matches("[7,8,9]{1}[0-9]{9}","st");
    System.out.println(result);
}

Ответы [ 3 ]

2 голосов
/ 23 июня 2019

В настоящее время с выполняется поиск шаблона в строке со значением "st" вместо значения локальной переменной st

Измените строку:

boolean result = Pattern.matches("[789]{1}[0-9]{9}",st);
2 голосов
/ 23 июня 2019

Вы всегда сравниваете строковый литерал st вместо ссылки на строку, которую вы прочитали.

вместо boolean result=Pattern.matches("[7,8,9]{1}[0-9]{9}","st"); используйте boolean result=Pattern.matches("[789][0-9]{9}",st);

1 голос
/ 23 июня 2019

Эти выражения также будут работать:

boolean result = Pattern.matches("[7-9][0-9]{9}", st);

или

boolean result = Pattern.matches("[789][0-9]{9}", st);

Также, возможно, если бы мы добавили ^ и $ якоря, это тоже было бы нормально:

^[789][0-9]{9}$
^[789]\d{9}$

Пожалуйста, посмотрите демо здесь.

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