合并 Java 中的两个数组以保持顺序并使用第一个数组的唯一空白值
Merge two arrays in Java to maintain the order and with the unique blank values of first array
我有两个数组。我需要空白用于以后的代码。
两个数组都有共同的值,并且共同的值应该是有序的。
这里有 Alpha
、Beta
、Phi
和 Gamma
。两个数组之间都有空格。
String[] a = { " ", "Alpha", "Beta", "Phi", " ", "Gamma" };
String[] b = { "Alpha", " ", "Beta", "Phi", "Gamma", " " };
输出应考虑第一个数组,即由于数组的第一个元素 a
是 " "
,因此输出以空白开头。第二个数组的 Alpha
和 Beta
之间的空白以及 Gamma
之后的空白应该保持不变,因为它是第二个数组的一部分。此外,由于在第一个数组中,a
在 Phi
和 Gamma
之间存在另一个 " "
,它不会出现在第二个数组中,因此 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, ]
我有两个数组。我需要空白用于以后的代码。
两个数组都有共同的值,并且共同的值应该是有序的。
这里有 Alpha
、Beta
、Phi
和 Gamma
。两个数组之间都有空格。
String[] a = { " ", "Alpha", "Beta", "Phi", " ", "Gamma" };
String[] b = { "Alpha", " ", "Beta", "Phi", "Gamma", " " };
输出应考虑第一个数组,即由于数组的第一个元素 a
是 " "
,因此输出以空白开头。第二个数组的 Alpha
和 Beta
之间的空白以及 Gamma
之后的空白应该保持不变,因为它是第二个数组的一部分。此外,由于在第一个数组中,a
在 Phi
和 Gamma
之间存在另一个 " "
,它不会出现在第二个数组中,因此 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, ]