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]