Мы можем попробовать использовать String#replaceAll
для опции в одну строку:
String input = "abcabc";
String output = input.replaceAll("^(.*)(?=\\1$).*", "$1\n$1");
System.out.println(output);
Это печатает:
abc
abc
Идея состоит в том, чтобы применить шаблон ко всей строке, которая соответствует и захватывает некоторое количество, за которым затем следует то же количество до конца. Вот шаблон, который объясняется как выполненный для вашего точного ввода abcabc
:
(.*) match 'abc'
(?=\1$) then lookahead and assert that what follows to the end of the string
is exactly another 'abc'
.* consume, but do not match, the remainder of the input (which must be 'abc')
Затем мы заменим на $1\n$1
, которая является первой группой захвата дважды, разделенной новой строкой.