比较两个字符串数组而不知道哪个包含更多值

时间:2018-08-18 01:10:13

标签: java arrays string

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

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

方案1 (大小相同,没有区别):


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}

实施方案1:


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

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

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

实施方案2:


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);

但是,如果您不知道第一个String Array包含的元素多于第二个String Array,或者第二个String Array包含的元素多于第一个,该如何处理方案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]);
 }

2 个答案:

答案 0 :(得分:1)

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

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]);
        }
    }
}

答案 1 :(得分:1)

我已经实现了compareArrays方法来处理您的情况,请尝试按照以下说明解决您的问题

  public class Test
  {
    public static void main(String[] args){
      compareArrays(new String[]{"Test1", "Test2", "Test3"},new String[]{"Test1", "Test2", "Test3"});
      compareArrays(new String[]{"Test1", "Test2", "Test3"},new String[]{"Test1", "Test2", "Test4"});
      compareArrays(new String[]{"Test1", "Test2", "Test3"},new String[]{"Test1", "Test2"});
      compareArrays(new String[]{"Test1", "Test2"},new String[]{"Test1", "Test2", "Test3"});
    }
    private static void compareArrays(String[] test,String[] test2){
      if(test.length > test2.length){
        System.out.println("Scenario 3");
      }
      else if(test2.length > test.length){
        System.out.println("Scenario 4");
      }
      else {
        boolean same = true;
        for (int a=0;a<test.length;a++){
          if(!test[a].equalsIgnoreCase(test2[a])){
            same = false;
          }
        }
        if (same){
          System.out.println("Scenario 1");
        }
        else {
          System.out.println("Scenario 2");
        }
      }
    }
  }