Создать новый массив, сравнив два массива String разной длины - PullRequest
0 голосов
/ 18 апреля 2020

У меня есть два массива String:

arr1 = {"i", "b", "v", "d", "y", "z", "u", "a"}
arr2 = {"i", "b", "v", "y", "u", "z", "a"}

Я хочу создать новый массив "arr3" из "arr1" и "arr2". Хитрость в том, что если в arr2 отсутствует элемент, то я хочу оставить пустой элемент, а также сохранить тот же порядок элементов в arr2.

В моем примере:

  • Элемент 'd' отсутствует в arr2, поэтому он будет arr3 [i] = ""
  • Элементы 'u' и 'z 'инвертированы по сравнению с "arr1", но это не имеет значения, так как я хочу сохранить порядок "arr2"

Вот мой код:

public static void main(String[] args){

    String[] arr1 = {"q", "b", "v", "d", "y", "z", "u", "a"};
    String[] arr2 = {"q", "b", "v", "y", "u", "z", "a"};

    String[] arr3 = new String[arr1.length];

    for(int i = 0;i<arr1.length ; i++) {
        if(getIndex(arr1[i], arr2) == -1)
            arr3[i] = "";
        else
            if (i < arr2.length)
               arr3[i] = arr2[i];   
    }
}

public static int getIndex(String element, String[] array) {
    for(int i=0;i<array.length;i++) {
        if(array[i].contentEquals(element))
            return i;
    }
    return -1;
}

Вывод кода выше:

arr3 = {"q", "b", "v", "", "u", "z", "a"}

Элемент 'y' пропущен из arr2.

1 Ответ

0 голосов
/ 18 апреля 2020

Полагаю, вам будет хорошо с использованием стандартных библиотечных функций.

Попробуйте следующее:

public static void main(String[] args)
{

    String[] arr1 = {"q", "b", "v", "d", "y", "z", "u", "a"};
    String[] arr2 = {"q", "b", "v", "y", "u", "z", "a"};

    String[] arr3 = new String[arr1.length];

    List array1 = new ArrayList(Arrays.asList(arr1));
    List array2 = new ArrayList(Arrays.asList(arr2));

    array1.forEach(element -> {
        if(!array2.contains(element))
        {
            int elementPosition = array1.indexOf(element);
            array2.add(elementPosition, "");
        }
    });

    // prints [q, b, v, , y, u, z, a]
    System.out.println(array2);
}

Если хотите, вы можете использовать другой массив (вместо array2) добавить пустые символы. Вы также можете преобразовать окончательный ArrayList в String[], если это то, что вам нужно.

Надеюсь, это поможет!

ОБНОВЛЕНИЕ: Хотя я удалил потоки, в forEach есть лямбда-выражение , который не будет работать с 1.7. PFB простой код java, совместимый с Java 1.7 для части forEach.

    // Without using Lambdas
    for(Object element : array1)
    {
        String s = (String) element;
        if(!array2.contains(s))
        {
            int elementPosition = array1.indexOf(element);
            array2.add(elementPosition, "");
        }
    }
...