Как найти номер определенного шаблона появился в другом шаблоне с помощью регулярного выражения? - PullRequest
1 голос
/ 01 октября 2019

Я пытаюсь решить проблему с помощью регулярного выражения, где мне нужно найти реплицированный шаблон в другом, но у меня есть проблема в шаблоне с чередованием, например: 1010 и 10101010

ответ должен быть3 но это дает мне 2

int count=0;
Pattern expression = Pattern.compile(s);

Matcher matcher = expression.matcher(scanner.next());
while(matcher.find())
{count++;}
System.out.println(count);

1 Ответ

1 голос
/ 01 октября 2019

Как только переменная найдена в первой, она ищет оттуда и далее, так что становится действительно сложно найти все совпадения на вашем пути.

Вот рекурсивное решение, которое я модифицировал из старого домарабочий проект, вероятно, не оптимизирован, но он работает.

public static void main(String[] args) 
    {  
         String str1 = "1010";
         String str2 = "10101010";
         int len = str2.length();
         System.out.println(match(str1,str2,len,len,0));
    } 
    static int match(String str1,String str2,int len,int j,int times)
    {
        if(j == 0)
            return  times;
        Pattern p = Pattern.compile(str1);
        Matcher m = p.matcher(str2);
        int n = 0;
        if(m.find()){
             n = m.start()+1;
             times++;
        }
        return match(str1,str2.substring(n,str2.length()),str2.length(),--j,times);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...