Вы только что сопоставили строку и просто распечатали ее, но не поместили логику между ними.Вам нужно добавить логику ввода пробела в блоке 4.
Глядя на ожидаемый результат вашего блока 4, вы можете сначала перехватить блок 4, используя это регулярное выражение,
(.*?)(\\{4.*?\\})(.*?)
изатем замените двоеточие пробелом (:) в содержимом группы 2, которое вы называете блоком 4. Я вижу, вы не вводите пробел с каждым двоеточием, а только для двоеточия, за которым следуют 2-3 символа, за которыми следует двоеточие.Я реализовал логику соответствующим образом в моем методе replaceAll()
.
Вот модифицированный код Java,
public static void StringReplace() {
String data = "{1:F01ANZBDEF0AXXX0509036846}{2:I103ANZBDEF0XXXXN}{4::20:TEST000001:23B:CRED:32A:141117EUR0,1:33B:EUR1000,00:50A:ANZBAU30:59:ANZBAU30:71A:SHA-}{5:{CHK:1DBBF1D81EE1}{TNG:}}";
Pattern pat = Pattern.compile("(.*)(\\{4.*?\\})(.*)");
Matcher m = pat.matcher(data);
if (m.find()) {
String g1 = m.group(1);
String g2 = m.group(2).replaceAll(":(?=\\w{2,3}:)", " :");
String g3 = m.group(3);
System.out.println(g1 + g2 + g3);
} else {
System.out.println("Didn't match");
}
}
Это выводит следующий вывод, как вы ожидаете,
{1:F01ANZBDEF0AXXX0509036846}{2:I103ANZBDEF0XXXXN}{4: :20:TEST000001 :23B:CRED :32A:141117EUR0,1 :33B:EUR1000,00 :50A:ANZBAU30 :59:ANZBAU30 :71A:SHA-}{5:{CHK:1DBBF1D81EE1}{TNG:}}