【问题标题】:Merging two ArrayLists of type String in Java在 Java 中合并两个 String 类型的 ArrayList
【发布时间】:2015-06-24 21:51:21
【问题描述】:

我有两个ArrayLists String 类型,想将它们混合如下:

SPK = [A,A,A,B,A,A,A,A,A,B]

DA= [ofm,sd,sd,sd,sd,sd,sd,sd,sd,sv]

我需要在其他ArrayList 中创建一些String,如下所示:

SPK_DA = [ofmAsdAsdAB, sdBA, sdAsdAsdAsdAsdAB]

在这个集合中,在 SPK 数组中发生转向(从 A 到 B)之前,我需要将之前的相似元素等同起来。

我写了一个程序,但它增加了一个额外的 sdA(我不知道为什么我不能做这么简单的事情)。

            for (int i=0; i <SPK.size()-1; i++){

            if (SPK.get(i)==SPK.get(i+1) && (i+1)<= SPK.size()){

            speakerChain = DA.get(i)+SPK.get(i);
            speakerChain1=DA.get(i+1)+SPK.get(i+1);
               SPKTrace.add(speakerChain);
               SPKTrace.add(speakerChain1);


            }else if (SPK.get(i)!=SPK.get(i+1)){

                if (SPKTrace.size()!=0){

            SPKTrace.add(SPK.get(i+1));
           //SPKString = removeDuplicates (SPKTrace);
           String S1 = arrayTostring(SPKTrace);
            SPKResource.add(S1);
            SPKTrace.clear();
                }else {
                    SPKTrace.add(DA.get(i)+SPK.get(i)+SPK.get(i+1));
                       //SPKString = removeDuplicates (SPKTrace);
                       String S1 = arrayTostring(SPKTrace);
                        SPKResource.add(S1);
                        SPKTrace.clear();

                }

            }

        }


         }
      }
System.out.println(SPKResource.toString());


My Output:   [ofmAsdAsdAsdAB, sdBA, sdAsdAsdAsdAsdAsdAsdAsdAB]

当我使用 for 循环时,它会创建更多的 sdAs....

【问题讨论】:

  • 我不确定你所说的 sdA 是什么意思...
  • @LanguidSquid SPK 是说话者,DA 是每个话语的对话行为; sd 表示说话者 A 发出的对话行为是陈述。
  • 我建议发布格式良好的可编译代码。如果您的代码易于阅读并且可以轻松地在本地重现问题,那么理解您的问题会容易得多。老实说,我很难弄清楚如何从这两个数组中生成 SPK_A。
  • 能否详细说明这两个数组之间的关系?是SPK_DA = ["SPK1+DA1", "SPK2+DA2", ...] 还是SPK_DA = ["SPK1+DA1", "SPK1+DA2", "SPK2+DA2", "SPK2+DA3", ...] 还是别的什么?
  • @LanguidSquid 我们有两个对话者,A 和 B。在 DA 集中,我们在对话时有他们的对话行为。例如,在上面的例子中,我展示了 A 和 B 之间对话的 10 句话及其对话行为。 ofm A(嗨),sd A(你很好。),sd A(你好吗?)和 B 开始说话并说“谢谢”,我通过 (sd B) 展示了它。现在我需要知道在 B 开始说话之前,说话者 A 使用了什么对话行为 (DA),我需要 (ofmAsdAsdAB);在 B 再次说话之后,A 开始说话,所以我们将拥有 (sdBA)...这些都是我在上面的 SPK_DA 中展示的转折点

标签: java loops array-merge


【解决方案1】:
            Indicies.add(0);
            for (int i = 0; i < SPK.size() - 1; i++) {

                if (SPK.get(i) != SPK.get(i + 1)) {

                    Indicies.add(i + 1);

                }

            }
            for (int i = 0; i < Indicies.size() - 1; i++) {

                Count.add(Indicies.get(i + 1) - Indicies.get(i));
            }
            Count.add((SPK.size() - Indicies.get(Indicies.size() -   1)));

            System.out.println("count:" + Count);
            int counter = 0;
            int newIndex =0;
            for (int j = 1; j <= Count.size(); j++) {

                String element = "";


                for (int kk = 0; kk < (Count.get(j-1)); kk++) {
                    element = element + (DA.get(kk+newIndex) + SPK.get(kk+newIndex));
                }
                 newIndex = newIndex+Count.get(j-1);


                if (element.endsWith("A")){
                    SPKResource.add(element+"B");
                } else if (element.endsWith("B")){
                    SPKResource.add(element+"A");
                }

            }

        }

    }
    for (String S:SPKResource){
        System.out.println(SPKResource);

    }

上面的代码可以给我答案,但我认为它的效率很低。有什么想法可以提高效率吗?

【讨论】:

    猜你喜欢
    • 2014-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多