【问题标题】:How to combine array list string in java?如何在java中组合数组列表字符串?
【发布时间】:2026-02-20 07:55:01
【问题描述】:

我有一些带有关键字的数组列表字符串!

一个windows是arraylist字符串,关键字是粗体 窗口结构:前 9 个单词 + 关键字 + 后 9 个单词

你可以看到一些窗口重叠

我如何组合该数组列表来接收这样的内容:

谢谢

【问题讨论】:

  • 如果您想得到这个问题的答案,请澄清您的问题并接受您之前的一些问题的答案。
  • 谢谢!我已经完成了,抱歉我不知道!

标签: java


【解决方案1】:

如果你不太担心性能,一个简单的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&lt;String&gt; joined,给定List&lt;String&gt; textAsList,我们在joined的“尾部”和textAsList的“头部”之间找到最长的subList匹配。

【讨论】:

  • 我有一些关键字的文档:我的目标是找到一些文本块里面有关键字:要做到这一点有一些步骤:拳头:我找到一个窗口是 arraylist 字符串内容:关键字 + 关键字之前的 9 个单词+ 关键字后的 9 个字。对于每个关键字。在这一步之后:我们有一些关键字的窗口(数组列表字符串),窗口可能重叠其次,我必须在这一步之后组合重叠的窗口,这将有 textchunks 内容关键字。这里的问题是,如果 windown 不重叠,它仍然会添加到 ListString 加入。乔恩之后我有一些关键字,我必须提前感谢
  • @tiendv:我不知道你想说什么。使用更多信息编辑问题,以使每个尝试提供帮助的人都受益。举例说明不同的情况。越多越好。还要给出操作参数的界限,因为最好的算法会非常复杂,但似乎存在一个简单但实​​用的解决方案。
【解决方案2】:

使用DefaultHighlighter查看How to Use Editor Panes and Text Panes和这些examples

附录:啊,我以为你只需要视图。对于模型,请考虑Knuth–Morris–Pratt algorithm,在此answer 中进行了讨论。

【讨论】:

  • 我没有提到如何在屏幕中显示和组合它。我的意思是我有一些 arrayList 字符串,比如 win1,win2,win3 。如果它有重叠,我怎么能结合胜利!谢谢
  • @tiendv:已修改,但看起来@polygenelubricants 可能有一个好主意;这个问题让我想起了匹配重叠的基因序列。
  • @thrasgod:是的,它也让我想起了这一点,我正要建议最先进的算法可能涉及后缀树/后缀数组。