JAVA如何从两个字符串数组或列表中删除相同的字符串对象

JAVA如何从两个字符串数组或列表中删除相同的字符串对象,java,arrays,arraylist,duplicates,Java,Arrays,Arraylist,Duplicates,这是我在这里的第一个问题,是关于Java的。 我想实现以下逻辑: 我有两个字符串数组(或字符串列表)。有一个 字符串数组(asu)-M1、M2、M3。。。以及字符串数组 (rzs)-M1、M2、M3及其所有可能的组合。需要 每个元素(asu)(例如M1)在(rzs)(M1)中查找元素, M1M2,…),其中包含(例如M1)。示例:从(asu)和 将在(rzs)中开始搜索重复(包含)。我们在里面发现了M1M2 (rzs),它包含M1。之后,我们应该从中删除这两个元素 数组(列表)。我为我的英语技能

这是我在这里的第一个问题,是关于Java的。 我想实现以下逻辑:

我有两个字符串数组(或字符串列表)。有一个 字符串数组(asu)-M1、M2、M3。。。以及字符串数组 (rzs)-M1、M2、M3及其所有可能的组合。需要 每个元素(asu)(例如M1)在(rzs)(M1)中查找元素, M1M2,…),其中包含(例如M1)。示例:从(asu)和 将在(rzs)中开始搜索重复(包含)。我们在里面发现了M1M2 (rzs),它包含M1。之后,我们应该从中删除这两个元素 数组(列表)。我为我的英语技能感到抱歉^^

String[]asu={“M1”、“M1”、“M1”、“M3”、“M4”、“M5”、“M1”、“M1”、“M1”、“M4”、“M5”、“M5”};
字符串[]rzs={“M1”、“M2”、“M3”、“M4”、“M5”、“M1M2”、“M1M3”、“M1M4”、“M1M5”、“M2M3”、“M2M4”、“M2M5”、“M3M4”、“M3M5”、“M4M5”、“M1M2M3”、“M1M2M4”,
“M1M2M5”、“M1M3M4”、“M1M3M4”、“M1M4M5”、“M2M4”、“M2M5”};
公共静态void main(最终字符串[]args){
工作bebebe=新工作();
bebe.mywork();
}
公共图书馆(我的作品){
System.out.println(Arrays.deepToString(rzs));
System.out.println(Arrays.deepToString(asu));
for(int i=0;i
结果不会删除作为子字符串的项。不符合逻辑。 谢谢你的建议


如果你使用列表,你会有更好的结果: 删除操作不会要求您收回数组的其余部分,使用列表意味着代码中的逻辑更少

List<string> asu = Arrays.asList("M1","M1","M1","M3","M4","M5","M1","M1","M1","M4","M5","M5");
List<string> rzs = Arrays.asList("M1","M2","M3","M4","M5",
"M1M2","M1M3","M1M4","M1M5","M2M3","M2M4","M2M5","M3M4","M3M5","M4M5"
,"M1M2M3","M1M2M4","M1M2M5","M1M3M4","M1M3M4","M1M4M5","M2M4","M2M5");
public static void main(String[] args) {
work bebebe = new work();
bebebe.mywork();
}

public static void mywork() {
   ArrayList<String> tmp1 = new ArrayList<String>();  
   ArrayList<String> tmp2 = new ArrayList<String>();  
   System.out.println((rzs));
   System.out.println((asu));
   for (String curr : asu){
     for (String currRzs : rzs){
       if (currRzs.contains(curr)) {
          System.out.println(" item("+curr+") in ASU found contained in ("+currRzs+") in RZS");

      if(tmp1.contains(curr) == false)
         tmp1.add(curr);

      if(tmp2.contains(currRzs) == false)
         tmp2.add(currRzs);
       }
      } 
    }

   for (String curr : tmp1){
      asu.remove(curr);
   }

   for (String curr : tmp2){
      rzs.remove(curr);
   }
}
List asu=array.asList(“M1”、“M1”、“M1”、“M3”、“M4”、“M5”、“M1”、“M1”、“M1”、“M1”、“M4”、“M5”、“M5”);
List rzs=Arrays.asList(“M1”、“M2”、“M3”、“M4”、“M5”,
“M1M2”、“M1M3”、“M1M4”、“M1M5”、“M2M3”、“M2M4”、“M2M5”、“M3M4”、“M3M5”、“M4M5”
“M1M2M3”、“M1M2M4”、“M1M2M5”、“M1M3M4”、“M1M3M4”、“M1M4M5”、“M2M4”、“M2M5”);
公共静态void main(字符串[]args){
工作bebebe=新工作();
bebe.mywork();
}
公共静态void mywork(){
ArrayList tmp1=新的ArrayList();
ArrayList tmp2=新的ArrayList();
System.out.println((rzs));
System.out.println((asu));
for(字符串货币:asu){
for(字符串currRzs:rzs){
if(当前包含(当前)){
System.out.println(“在RZS中的(“+currRzs+”)中发现的ASU中的项目(“+curr+”)”);
如果(tmp1.contains(curr)==false)
tmp1.添加(当前);
if(tmp2.contains(currRzs)==false)
tmp2.添加(currRzs);
}
} 
}
用于(字符串电流:tmp1){
asu.移除(当前);
}
用于(字符串货币:tmp2){
rzs.移除(当前);
}
}

您的代码很漂亮,但您的解决方案也不符合逻辑。正如我之前所说,如果我们在(RZ)中发现M1M2,我们应该将其与M1进行比较。如果M1是M1M2的子串,我们应该同时删除这两个。你的代码不能做到这一点。“Contain”语句仅比较M1=M1之类的对象,而不比较对象字符串@EldarNezametdinov包含的不等于。您可以将字符串框到自己的类中,并重写等于do indexOf的值。你想举个例子吗?如果对你来说不难的话,因为我几天前才开始学习Java。。。我不知道如何处理这种情况。程序总是被java.util.AbstractList压碎,这应该是因为我们更新List+curr已经定义好了,我把它改为->curr2和rzs.remove(curr)可以吗?我无法传递参数currRzs@EldarNezametdinov我忘了关闭“for”循环,我已经编辑了它,现在它不应该崩溃
List<string> asu = Arrays.asList("M1","M1","M1","M3","M4","M5","M1","M1","M1","M4","M5","M5");
List<string> rzs = Arrays.asList("M1","M2","M3","M4","M5",
"M1M2","M1M3","M1M4","M1M5","M2M3","M2M4","M2M5","M3M4","M3M5","M4M5"
,"M1M2M3","M1M2M4","M1M2M5","M1M3M4","M1M3M4","M1M4M5","M2M4","M2M5");
public static void main(String[] args) {
work bebebe = new work();
bebebe.mywork();
}

public static void mywork() {
   ArrayList<String> tmp1 = new ArrayList<String>();  
   ArrayList<String> tmp2 = new ArrayList<String>();  
   System.out.println((rzs));
   System.out.println((asu));
   for (String curr : asu){
     for (String currRzs : rzs){
       if (currRzs.contains(curr)) {
          System.out.println(" item("+curr+") in ASU found contained in ("+currRzs+") in RZS");

      if(tmp1.contains(curr) == false)
         tmp1.add(curr);

      if(tmp2.contains(currRzs) == false)
         tmp2.add(currRzs);
       }
      } 
    }

   for (String curr : tmp1){
      asu.remove(curr);
   }

   for (String curr : tmp2){
      rzs.remove(curr);
   }
}