首页 > 解决方案 > 在不知道哪一个包含更多值的情况下比较两个字符串数组

问题描述

我必须在 Java 中比较两个字符串数组的值并保存不同的字符串。我已经知道如何比较相同大小的字符串数组。但问题是,这些字符串数组的值的计数在一开始是未知的。因此,尚不清楚哪个字符串数组更大。

所以我必须处理以下情况:

场景一 (大小相同,无差异):


String[] test = {Test1, Test2, Test3}
String[] test2 = {Test1, Test2, Test3}

场景2(大小相同,但不同):


String[] test = {Test1, Test2, Test3}
String[] test2 = {Test1, Test2, Test4}

场景 3(不同大小 - 第一个字符串数组包含的值多于第二个):


String[] test = {Test1, Test2, Test3}
String[] test2 = {Test1, Test2}

场景 4(不同大小 - 第二个字符串数组包含比第一个更多的值):


String[] test = {Test1, Test2}
String[] test2 = {Test1, Test2, Test3}

实施方案一:


for(int i = 0; i < test.length; i++){

    if(! ( Arrays.asList(test).contains(test2[i]) ) ) {

    } else {
        System.out.println("Scenario 1");
    }
}

实施方案二:


ArrayList<String> compare_String = new ArrayList<>();

for(int i = 0; i < test.length; i++){

    if(! ( Arrays.asList(test).contains(test2[i]) ) ) {

        compare_String.add(test2[i]);
        System.out.println("Scenario2");

    } else {
        System.out.println("Scenario 1");
    }
} System.out.println(compare_String);

但是,如果您不知道第一个字符串数组是否包含比第二个更多的元素,或者第二个字符串数组是否包含比第一个更多的元素,如何处理场景 3 和 4?

非常感谢。

更新: 非常感谢您的回答。这对我有用:

ArrayList<String> difference = new ArrayList<>();
int j = 0;

if (test > test2) {
  try {
     for (int i = 0; i < test; i++) {
         if (!(Arrays.asList(test2).contains(test1[i]))) {
             difference.add(test[i]);
         }

         j++;

     }

 } catch (ArrayIndexOutOfBoundsException ar) {
     difference.add(test[j]);
 }

标签: javaarraysstring

解决方案


使用布尔数组来跟踪重复的字符串,并简单地检查一个数组的所有元素以查看另一个数组是否包含它。第二个数组中未使用的字符串在第一个数组中也丢失了,因此无论数组大小如何,您都可以将它们放在不同的位置。

String[] array1;
String[] array2;

ArrayList<String> diff = compare_arrays(array1, array2);

public ArrayList<String> compare_arrays(String[] a1, String[] a2){
    ArrayList<String> diff = new ArrayList<String>();

    boolean[] rep = new boolean[a2.length];

    Arrays.fill(a2, false);

    for(String str : a1){
        if(!Arrays.asList(a2).contains(str)){
            diff.add(str);
        }
        else{
            rep[Arrays.asList(a2).indexOf(str)] = true;
        }
    }

    for(int i = 0; i < a2.length; i++){
        if(!rep[i]){
            diff.add(a2[i]);
        }
    }
}

推荐阅读