Как объединить строку списка массивов в Java? - PullRequest
0 голосов
/ 25 мая 2010

У меня есть какая-то строка arraylist с таким ключевым словом внутри!

Окно - строка массива с ключевым словом - жирным шрифтом Структура окна: 9 слов до + ключевое слово + 9 слов после

Вы можете видеть некоторые окна, перекрывающиеся alt text

Как мне объединить этот массив, чтобы получить вот так:

alt text

Спасибо

Ответы [ 2 ]

4 голосов
/ 25 мая 2010

Если вы не слишком беспокоитесь о производительности, очень просто написать простое соответствие subList/equals:

    String[] texts = {
        "sunset lake michigan michigan alaska water florida "
        + "peninsula third largest water seventh largest water "
        + "percentage edit list largest country",

        "michigan alaska water florida peninsula third largest water "
        + "seventh largest water percentage edit list largest country "
        + "subdivision list political",

        "third largest water seventh largest water percentage edit list "
        + "largest country subdivision list political geographic "
        + "subdivisions total edit references"
    };
    List<String> joined = new ArrayList<String>();
    for (String text : texts) {
        List<String> textAsList = Arrays.asList(text.split(" "));
        final int N = joined.size();
        final int M = textAsList.size();
        for (int k = Math.min(N, M); k >= 0; k--) {
            if (joined.subList(N - k, N).equals(textAsList.subList(0, k))) {
                joined.addAll(textAsList.subList(k, M));
                break;
            }
        }
    }
    System.out.println(joined);

Это печатает:

[sunset, lake, michigan, michigan, alaska, water, florida,
peninsula, third, largest, water, seventh, largest, water,
percentage, edit, list, largest, country, subdivision, list,
political, geographic, subdivisions, total, edit, references]

Алгоритм работает так, как он говорит: чтобы построить List<String> joined, учитывая List<String> textAsList, мы находим самое длинное subList соответствие между "хвостом" joined и "головой" textAsList.

0 голосов
/ 25 мая 2010

См. Как использовать панели редактора и текстовые панели и эти примеры с использованием DefaultHighlighter.

Приложение: Ах, я думал, что вам просто нужен вид. Для модели рассмотрим алгоритм Кнута-Морриса-Пратта , рассмотренный в этом ответе .

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