Прежде всего, я бы порекомендовал использовать Matcher.replaceAll()
вместо построения строки самостоятельно. Завершенные все совпадения шаблона заменяются данной замещающей строкой. Вы можете использовать группы захвата из вашего шаблона, используя $X
(например, $1
для первой группы) в вашей замещающей строке.
Итак, ваш код будет выглядеть так:
Pattern pattern = Pattern.compile("^.+?(?=#)(.*)(#check[^/#]+Some[^/#]+)(/#)(.*)");
Matcher matcher = pattern.matcher(line);
String replaced = matcher.replaceAll("$1$2 is manipulated$3$4");
System.out.println(replaced);
Вот некоторые результаты для заданных входных данных:
IN: I am #check Some Text/#Middle#check Text/#
OUT: #check Some Text is manipulated/#Middle#check Text/#4
IN: I am #check hello there Some Text/#Middle#check Text/#
OUT: #check hello there Some Text is manipulated/#Middle#check Text/#
IN: I am #check Text/#Middle#check Some Text/#
OUT: #check Text/#Middle#check Some Text is manipulated/#
Если шаблон должен соответствовать регистронезависимому, вы можете использовать его для его создания:
Pattern pattern = Pattern.compile("...", Pattern.CASE_INSENSITIVE);