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

问题描述 投票:0回答:1

我有两个数组。我需要空白以备后用。

两个数组都将具有公共值,并且公共值应按顺序排列。

[这里有Alpha,Beta Phi和Gamma。两个数组之间都存在空格。

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

输出应考虑第一个数组,即,由于数组a的第一个元素为“”,因此输出以Blank开头。第二个数组的Alpha和Beta之间的空白以及Gamma之后的空白应保持不变,因为它是第二个数组的一部分。另外,由于在第一个数组a中,在Phi和Gamma之间还有另一个“”,它不在第二个数组b中出现,因此也被添加到输出中。两个数组的顺序必须保持相同,因为插入“”会改变位置。

预期输出:

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

常规合并很简单,并且有很多示例。但是,这是我无法弄清楚的。

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

很抱歉,这实际上是重复的帖子。

java arrays merge array-merge
1个回答
0
投票

请记住,这是边际情况,边际情况可能需要完全不同的算法。

package com.company.test;

import java.util.ArrayList;
import java.util.List;

public class TestArrayMerge {
    static public List<String> merge(String[] a, String[] b) {
        List<String> r = new ArrayList<>(a.length + b.length);
        int i = 0, j = 0;
        final String BLANK = " ";
        while (i < a.length && j < b.length) {
            if (a[i].equals(b[j])) {
                r.add(a[i]);
                i++;
                j++;
            } else if (a[i].equals(BLANK)) {
                r.add(BLANK);
                i++;
            } else if (b[j].equals(BLANK)) {
                r.add(BLANK);
                j++;
            } else {
                // TODO: edge cases
                r.add(b[j]);
                j++;
            }
        }
        for (; i < a.length; i++) {
            r.add(a[i]);
        }
        for (; j < b.length; j++) {
            r.add(b[j]);
        }
        return r;
    }


    public static void main(String[] args) {
        System.out.println( merge(
                new String[] { " ", "Alpha", "Beta", "Phi", " ", "Gamma" },
                new String[] { "Alpha", " ", "Beta", "Phi", "Gamma", " " }
        ));
        System.out.println( merge(
                new String[] { " ", "Alpha", "Beta", "Phi", " ", "Gamma" },
                new String[] { "Alpha", "NoSuch", "Beta", "Phi", "Gamma", " " }
        ));
    }
}

输出:

[ , Alpha,  , Beta, Phi,  , Gamma,  ]
[ , Alpha, NoSuch, Beta, Phi,  , Gamma,  ]
© www.soinside.com 2019 - 2024. All rights reserved.