Похоже, вы просто хотите извлечь число после #
из ваших двух строк, которые c#1.text2
и d#2.text3
, и заменить ?
сразу после #
в a#?.text1
строке.
Код, который вы написали, кажется немного похожим на то, где вы создали два Pattern
, а затем вы выполняете замену, используя Matcher
объекты, захватывая три группы, где это можно легко сделать с помощью некоторых более коротких кодов. без необходимости создавать два Pattern
объекта.
Просто извлеките число, которое нужно заменить, и затем замените его в строке напрямую, используя метод replaceFirst
для самого объекта String
, используя эти коды,
Pattern replacePattern = Pattern.compile("\\w+#(\\d+)\\.\\w+");
Matcher m = replacePattern.matcher("c#1.text2"); // same way for d#2.text3
if (m.matches()) {
String digit = m.group(1); // the digit you wanted to extract
String retVal = "a#?.text1".replaceFirst("(?<=#)\\?", digit); // replace ? preceded by # with the digit using replaceFirst
System.out.println(retVal); // prints a#1.text1
return retVal;
} else {
System.out.println("String doesn't match the pattern");
}
В целом ваши коды можно записать так:
Pattern replacePattern = Pattern.compile("\\w+#(\\d+)\\.\\w+");
Matcher m = replacePattern.matcher("c#1.text2"); // same way for d#2.text3
if (m.matches()) {
return "a#?.text1".replaceFirst("(?<=#)\\?", m.group(1)); // returns a#1.text1
}