通过比较两个不同长度的字符串数组来创建新数组

Posted

技术标签:

【中文标题】通过比较两个不同长度的字符串数组来创建新数组【英文标题】:Create new array by comparing two arrays of String of different length 【发布时间】:2020-04-18 13:12:19 【问题描述】:

我有两个字符串数组:

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] = "" 与“arr1”相比,元素“u”和“z”是相反的,但这并不重要,因为我想保持“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”。

【问题讨论】:

【参考方案1】:

我猜你可以使用标准库函数。

尝试以下方法:

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, "");
        
    

【讨论】:

谢谢@Shrinath。可以不使用流吗?因为我使用的是 java 1.7 当然,只需使用 for 循环 :) 更新了答案!如果解决了您的问题,请勾选答案! 您可以删除.stream()Iterable 有一个 .forEach() 方法。 好收获。谢谢@JohannesKuhn。根据您的 cmets 更新答案。 再次感谢! .解决了。​​

以上是关于通过比较两个不同长度的字符串数组来创建新数组的主要内容,如果未能解决你的问题,请参考以下文章

static,abstract,final理解

比较数组 ios

Java实现比较两个数值数组的大小

PyCUDA 2D数组实现(或使用字符串)

JavaScript中数组的方法和字符串方法总结

stringbuffer和stringbuilder