通过比较两个不同长度的字符串数组创建新数组
Create new array by comparing two arrays of String of different length
我有两个字符串数组:
arr1 = {"i", "b", "v", "d", "y", "z", "u", "a"}
arr2 = {"i", "b", "v", "y", "u", "z", "a"}
我想从 "arr1" 和 "arr2" 创建一个新数组 "arr3"。诀窍是,如果 arr2 中缺少元素,那么我想保留一个空元素,同时保持 arr2 中元素的相同顺序。
在我的示例中:
- arr2 中缺少元素 'd',因此它会 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"}
arr2 中缺少元素 'y'。
我猜你使用标准库函数会很好。
尝试以下操作:
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);
}
如果需要,您可以使用另一个arraylist(而不是array2)来添加空字符。如果需要,您还可以将最终的 ArrayList
转换为 String[]
。
希望对您有所帮助!
更新:虽然我删除了流,但在 forEach 中有一个 lambda 表达式,它不适用于 1.7。 PFB forEach 部分与 Java 1.7 兼容的纯 java 代码。
// Without using Lambdas
for(Object element : array1)
{
String s = (String) element;
if(!array2.contains(s))
{
int elementPosition = array1.indexOf(element);
array2.add(elementPosition, "");
}
}
我有两个字符串数组:
arr1 = {"i", "b", "v", "d", "y", "z", "u", "a"}
arr2 = {"i", "b", "v", "y", "u", "z", "a"}
我想从 "arr1" 和 "arr2" 创建一个新数组 "arr3"。诀窍是,如果 arr2 中缺少元素,那么我想保留一个空元素,同时保持 arr2 中元素的相同顺序。
在我的示例中:
- arr2 中缺少元素 'd',因此它会 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"}
arr2 中缺少元素 'y'。
我猜你使用标准库函数会很好。
尝试以下操作:
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);
}
如果需要,您可以使用另一个arraylist(而不是array2)来添加空字符。如果需要,您还可以将最终的 ArrayList
转换为 String[]
。
希望对您有所帮助!
更新:虽然我删除了流,但在 forEach 中有一个 lambda 表达式,它不适用于 1.7。 PFB forEach 部分与 Java 1.7 兼容的纯 java 代码。
// Without using Lambdas
for(Object element : array1)
{
String s = (String) element;
if(!array2.contains(s))
{
int elementPosition = array1.indexOf(element);
array2.add(elementPosition, "");
}
}