JAVA шаблон и превращение в регулярное выражение

Есть шаблон (?)[##] и нужно его представить в виде регулярного выражения. Как я понял этот шаблон ищeт в строке любой символ за которым идёт две цифры. В книге был пример - ?##*a(альфа) и там регулярное выражение выводилось \\S\\d\\d\\S*[a-z]. Я попытался переделать под свой шаблон вышло \\S\\d\\d, но не уверен что правильно. Кто может помочь решить данную задачу. Код самой программы:

package u.i;

import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
     
public class project3 implements TextProcessor
{
     
    public static void main(String[] args)
    {
        Scanner scan = new Scanner(System.in);
        project3 textProccesor2 = new project3();
        String s2 = scan.nextLine();
        System.out.println("шаблон " + textProccesor2.getTemplate());
        System.out.println("регулярное выражение " + textProccesor2.getRegex());
        System.out.println("масив примеров слов " + Arrays.toString(textProccesor2.get10Examples()));
        System.out.println("Количество входов шаблона у строку = " + textProccesor2.regexCount(s2));
        System.out.println("Удаление слова, которое удовлетворяет шаблон " + textProccesor2.regexRemove(s2));
        System.out.println("Замена слова, которое удовлетворяет шаблон " + textProccesor2.regexReplace(s2));
        System.out.println("масив слов,за шаблоном " + Arrays.toString(textProccesor2.regexFind(s2)));
    }

    public String process(String inputSequence)
    {
        String[] tokens = inputSequence.split("\\s+");
        double result = Double.parseDouble(tokens[1]);

        for (int i = 2; i < tokens.length; i++)
        {
            switch (tokens[0])
            {
                case "+":
                    result += Double.parseDouble(tokens[i]);
                    break;
                case "-":
                    result -= Double.parseDouble(tokens[i]);
                    break;
                case "*":
                    result *= Double.parseDouble(tokens[i]);
                    break;
                default: break;
            }
        }
        return String.valueOf(result);
    }
    
    @Override
    public int regexCount(String inputSequence)
    {
        int n = 0;
        Pattern p = Pattern.compile("\\S\\d\\d");
        Matcher m = p.matcher(inputSequence);
        while (m.find())
        {
            n++;
        }
        return n;
    }
    
    @Override
    public String regexRemove (String inputSequence)
    {
        Pattern p = Pattern.compile("\\S\\d\\d");
        Matcher m = p.matcher(inputSequence);
        String s = m.replaceAll("");
        return s;
    }

    @Override
    public String regexReplace (String inputSequence)
    {
        Pattern p = Pattern.compile("\\S\\d\\d");
        Matcher m = p.matcher(inputSequence);
        String s = m.replaceAll("*****");
        return s;
    }

    @Override
    public String[] regexFind(String inputSequence)
    {
        int i = 0;
        String[] massiv = new String[regexCount(inputSequence)];
        Pattern p = Pattern.compile("\\S\\d\\d");
        Matcher m = p.matcher(inputSequence);
        while (m.find())
        {
            massiv[i]=m.group();
            i++;
        }
        return massiv;
    }

    @Override
    public String getTemplate()
    {
        String s = "(?)[##]";
        return s;
    }

    @Override
    public String getRegex()
    {
        String s = "\\S\\d\\d";
        return s;
    }

    @Override
    public String[] get10Examples()
    {
        char ch1, ch2, ch3, ch4;
        int g;
        String frag;
        String[] s = new String[10];
        Random r = new Random();
        StringBuilder slovo;
        for (int i = 0; i < 10; i++)
        {
            frag = "";
            slovo = new StringBuilder();
            g = r.nextInt(9);
            ch1 = (char) (r.nextInt(100)+32);
            ch2 = (char) (r.nextInt(9) + 48);
            ch3 = (char) (r.nextInt(9) + 48);
            for (int m = 0; m <= g; m++)
            {
                frag = frag + ((char) (r.nextInt(100)+32));
            }
            ch4 = (char) (r.nextInt(26) + 97);
            slovo.append(ch1).append(ch2).append(ch3).append(frag).append(ch4);
            s[i] = slovo.toString();
        }
        return s;
    }
}
     
interface TextProcessor
{
    String process(String inputSequence);
    int regexCount(String inputSequence);
    String regexRemove(String inputSequence);
    String regexReplace(String inputSequence);
    String[] regexFind(String inputSequence);
    String getTemplate();
    String getRegex();
    String[] get10Examples();
}

Ответы (1 шт):

Автор решения: Олег

Я розобрался. Спасибо всем кто пытался помочь)) Получаеться очень просто, нужно регулярное выражение моего шаблона, а именно: (\S)[\d{2}], добавить плюс и получиться (\S)+[\d{2}]. И тогда всё работает. Пример выполнения програмы:

akmfein432 oanfoien54 onfaoinf onfoin32
шаблон (?)[##]
регулярний вираз (\S)+[\d{2}]
масив прикладів слів ["81848662, 63441228260, n2337, R3628357, O1810455, Z33834065, <38657324, |403185668218, !6746506, Z72566810]
Кількість входу шаблона у строку = 3
видаляє слова, що задовольняють шаблону   onfaoinf 
замінює слова, що задовольняють шаблону ***** ***** onfaoinf *****
масив слів,за шаблоном [akmfein432, oanfoien54, onfoin32]
→ Ссылка