Используйте регулярное выражение, подобное этому:
String s = "vivaryvivartypadney";
Matcher m = Pattern.compile("(.*)\g(-1)(.*)").matcher(s);
if (m.find())
String prefix = m.group(1), suffix = m.group(2);
Первые круглые скобки в регулярном выражении определяют группу, а \ g (-1) является относительной ссылкой на предыдущую группу сопоставления.Теперь, если бы ваша строка была чем-то вроде «vivavivavivavivaChile», вы получили бы совпадение, но только из-за «первого» дублирования, а не более длинного второго (как упоминалось в другом ответе).Я оставлю это вам, чтобы поставить это в цикл, чтобы получить самый длинный такой матч, если вы этого хотите.