Как удалить повторяющиеся строки в больших строковых данных? - PullRequest
0 голосов
/ 15 октября 2010

например, я получаю данные типа "вивартвивартпандей", я хочу выводить как "вивартпандей". Исправлено только одно, что данные будут поступать либо как строка1 + строка1 + строка2, либо как строка1 + строка2 (без дублирования), но строки1 и строка2 обапеременная.

Итак, как определить строку1 и удалить дубликат строки1?

Ответы [ 3 ]

2 голосов
/ 15 октября 2010

нам нужно больше ограничений, чтобы достичь этого.Например, если вы получаете «ssssabcd», то нет способа узнать, является ли string1 «ssss» или «ss» (то есть, если произошло повторение)

0 голосов
/ 16 октября 2010

Я попытался создать простое решение.

    int index = 0;
    for (int i = 0; i <= text.length() / 2; i++) {
        String string1 = text.substring(0, i);
        String string2 = text.substring(i, 2 * i);
        if (string1.equals(string2)) {
            index = i;
        }
    }
    System.out.println("without duplicate: " + text.substring(index));
0 голосов
/ 15 октября 2010

Используйте регулярное выражение, подобное этому:

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», вы получили бы совпадение, но только из-за «первого» дублирования, а не более длинного второго (как упоминалось в другом ответе).Я оставлю это вам, чтобы поставить это в цикл, чтобы получить самый длинный такой матч, если вы этого хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...