Вы должны были использовать \b(\w+)\b\s+\b\1\b
, нажмите здесь , чтобы увидеть результат ...
Надеюсь, это то, что вы хотите ...
Обновление 1
Хорошо, хорошо, у вас есть вывод
последняя строка после удаления дубликатов
import java.util.regex.*;
public class MyDup {
public static void main (String args[]) {
String input="This This is text text another another";
String originalText = input;
String output = "";
Pattern p = Pattern.compile("\\b(\\w+)\\b\\s+\\b\\1\\b", Pattern.MULTILINE+Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(input);
System.out.println(m);
if (!m.find())
output = "No duplicates found, no changes made to data";
else
{
while (m.find())
{
if (output == "") {
output = input.replaceFirst(m.group(), m.group(1));
} else {
output = output.replaceAll(m.group(), m.group(1));
}
}
input = output;
m = p.matcher(input);
while (m.find())
{
output = "";
if (output == "") {
output = input.replaceAll(m.group(), m.group(1));
} else {
output = output.replaceAll(m.group(), m.group(1));
}
}
}
System.out.println("After removing duplicate the final string is " + output);
}
Запустите этот код и посмотрите, что вы получите в качестве результата ... Ваши запросы будут решены ...
Примечание
В output
вы заменяете дубликат одним словом ... Не так ли?
Когда я вначале ставлю System.out.println(m.group() + " : " + m.group(1));
, если при условии получаю вывод как text text : text
, т.е. дубликаты заменяются одним словом.
else
{
while (m.find())
{
if (output == "") {
System.out.println(m.group() + " : " + m.group(1));
output = input.replaceFirst(m.group(), m.group(1));
} else {
Надеюсь, ты понял, что происходит ...:)
Удачи !!! Ура !!!