Как мне написать программу, которая проверяет, соответствуют ли цифры или буквы в строке заданному шаблону?

#java #regex #algorithm

Вопрос:

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

абб абб абб абб абб абб абб абб абб абб абб абб абб абб абб абб абб абб абб

Я поставил пробелы, чтобы сделать это более понятным. Как вы можете видеть, это следует шаблону, в котором каждый раз, когда за » abb «следует » abbb», количество раз, когда «abbb» встречается на каждой итерации, увеличивается на 1. Так что это что-то вроде этого:

В каждой итерации: abb(abbb )

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

Комментарии:

1. Каковы входные и ожидаемые выходные данные?

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

3. @user47 если я не ошибаюсь, ваш шаблон-abb(abbb)

4. Вы можете использовать регулярное выражение для сопоставления, добавьте регулярное выражение тега в свой вопрос

5. Одно регулярное выражение не может этого сделать. Вам также придется написать код, чтобы проверить, правильно ли растут совпадающие термины

Ответ №1:

Вы можете использовать регулярные выражения в java, подробнее читайте об API регулярных выражений в java

     import java.util.regex.Pattern;

    System.out.println (Pattern.matches("abb(abbb) ","abbabbb"));
 

Ответ №2:

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

Затем подтвердите с помощью

 ^((abb|1)abbb) $
 

См.Доказательство регулярного выражения.

Java-код:

 yourString.matches("((abb|\1)abbb) ")
 

объяснение

 --------------------------------------------------------------------------------
  ^                        the beginning of the string
--------------------------------------------------------------------------------
  (                        group and capture to 1 (1 or more times
                           (matching the most amount possible)):
--------------------------------------------------------------------------------
    (                        group and capture to 2:
--------------------------------------------------------------------------------
      abb                      'abb'
--------------------------------------------------------------------------------
     |                        OR
--------------------------------------------------------------------------------
      1                       what was matched by capture 1
--------------------------------------------------------------------------------
    )                        end of 2
--------------------------------------------------------------------------------
    abbb                     'abbb'
--------------------------------------------------------------------------------
  )                        end of 1 (NOTE: because you are using a
                           quantifier on this capture, only the LAST
                           repetition of the captured pattern will be
                           stored in 1)
--------------------------------------------------------------------------------
  $                        before an optional n, and the end of the
                           string
 

Если вы хотели извлечь, используйте

 abb(?:abbb) 
 

Смотрите это доказательство регулярного выражения.

объяснение

 --------------------------------------------------------------------------------
  abb                      'abb'
--------------------------------------------------------------------------------
  (?:                      group, but do not capture (1 or more times
                           (matching the most amount possible)):
--------------------------------------------------------------------------------
    abbb                     'abbb'
--------------------------------------------------------------------------------
  )                        end of grouping
 

Java-код:

 import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Example {
    public static void main(String[] args) {
        final String regex = "abb(?:abbb) ";
        final String string = "abbabbbnabbabbbabbabbbabbbnabbabbbabbabbbabbbabbabbbabbbabbbabbnabbabbbabbabbbabbbn";
        
        final Pattern pattern = Pattern.compile(regex);
        final Matcher matcher = pattern.matcher(string);
        
        while (matcher.find()) {
            System.out.println(matcher.group(0));
        }
    }
}