合并 Java 中的两个数组以保持顺序并使用第一个数组的唯一空白值

Merge two arrays in Java to maintain the order and with the unique blank values of first array

我有两个数组。我需要空白用于以后的代码。

两个数组都有共同的值,并且共同的值应该是有序的。

这里有 AlphaBetaPhiGamma。两个数组之间都有空格。

String[] a = { " ", "Alpha", "Beta", "Phi", " ", "Gamma" };
String[] b = { "Alpha", " ", "Beta", "Phi", "Gamma", " " };

输出应考虑第一个数组,即由于数组的第一个元素 a" ",因此输出以空白开头。第二个数组的 AlphaBeta 之间的空白以及 Gamma 之后的空白应该保持不变,因为它是第二个数组的一部分。此外,由于在第一个数组中,aPhiGamma 之间存在另一个 " ",它不会出现在第二个数组中,因此 b 因此也是添加到输出中。两个数组的顺序必须保持不变,但位置会因插入 " " 而改变。

预期输出:

[ " ", "Alpha", " ", "Beta", "Phi", " ", "Gamma", " " ]

普通的合并很简单,而且有很多例子。然而,这是我还无法弄清楚的事情。

任何提示或示例都会有所帮助。

抱歉,这不知为何是重复的 post。

您可以按照以下方式进行:

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        int i, j, k;
        String[] a = { " ", "Alpha", "Beta", "Phi", " ", "Gamma" };
        String[] b = { "Alpha", " ", "Beta", "Phi", "Gamma", " " };

        // Target array
        String[] c = new String[a.length + b.length];

        // Copy the elements from both the source arrays to the target array
        for (i = 0; i < a.length && i < b.length; i++) {
            add(c, a[i]);
            add(c, b[i]);
        }

        // Copy the remaining elements from the first source array
        for (k = i; k < a.length; k++) {
            add(c, a[k]);
        }

        // Copy the remaining elements from the second source array
        for (k = i; k < b.length; k++) {
            add(c, b[k]);
        }

        // Discard null elements
        c = trim(c);

        // Display the target array
        System.out.println(Arrays.toString(c));
    }

    static void add(String[] arr, String s) {
        int i;
        if (" ".equals(s)) {
            // Find the position of first null
            for (i = 0; arr[i] != null && i < arr.length; i++) {
                // Do nothing
            }

            // Replace null with " "
            arr[i] = s;
            return;
        }

        // Return if the string already exists
        for (i = 0; arr[i] != null && i < arr.length; i++) {
            if (arr[i].equals(s)) {
                return;
            }
        }

        // Replace null with the string
        arr[i] = s;
    }

    static String[] trim(String[] arr) {
        int i;

        // Find the position of first null
        for (i = 0; arr[i] != null && i < arr.length; i++) {
            // Do nothing
        }

        return Arrays.copyOf(arr, i);
    }
}

输出:

[ , Alpha,  , Beta, Phi,  , Gamma,  ]