在一个连接的字符串数组中合并2个字符串数组的值

时间:2015-08-27 20:05:46

标签: java

我有2个字符串数组。

string [] first = {"ajunkbc","ajunkHello","adedbc","abcjunk","add","ad","a","","junk","ajunk","aajunkbb"};
String  [] second = {"abc","aHello","adedbc","abcjunk","add","ad","a","","junk","a","aajunkbb"};

我希望我的merge()方法的结果是将first数组中的每个元素与用逗号分隔的second数组的相应元素连接起来。

以下是我的代码

private static String[] merge(String [] tests, String [] expectations){

    List<String> testList = Arrays.asList(tests);
    List<String> expectationsList = Arrays.asList(expectations);

    List<String> retList = new ArrayList<String>();
    for(String test : testList){
        for(String val : expectationsList){
            retList.add(test+","+val);
            break;
        }
    }

这不起作用。我的代码出了什么问题?

2 个答案:

答案 0 :(得分:4)

错误的是你在expectationsList循环并在第一次迭代后突破循环:

for(String val : expectationsList){
    retList.add(test+","+val);
    break; //<--- breaking out of loop after first iteration each time
}

结果是你总是检索expectationsList的第一个元素。

由于你想要的是遍历两个数组,你应该使用索引:

for (int i = 0; i < testList.size(); i++) {
    retList.add(testList.get(i)+","+expectationsList.get(i));
}

另请注意,这意味着testList的大小与expectationsList的大小相同。如果不是这种情况,你的方法应该抛出异常。

请注意,您无需将输入数组转换为列表。你可以按原样使用它们。

private static String[] merge(String[] tests, String[] expectations) {
    if (tests.length != expectations.length) {
        throw new IllegalArgumentException("input not of same length");
    }
    String[] result = new String[tests.length];
    for (int i = 0; i < tests.length; i++) {
        result[i] = tests[i] + "," + expectations[i]);
    }
    return result;
}

Java 8解决方案:

private static String[] merge(String[] tests, String[] expectations) {
    if (tests.length != expectations.length) {
        throw new IllegalArgumentException("input not of same length");
    }
    return IntStream.range(0, tests.length).mapToObj(i -> tests[i] + "," + expectations[i]).toArray(String[]::new);
}

答案 1 :(得分:1)

您正在遍历testList的每个成员,然后针对每个成员,遍历expectationsList的每个成员。你想要一起遍历它们中的每一个。

你想要做的是这样的事情:

private static String[] merge(String[] tests, String[] expectations) {
    String[] result = new String[tests.length];
    for(int i = 0; i < tests.length; i++) {
        result[i] = tests[i] + "," + expectations[i];
    }
    return result;
}

此代码假设testsexpectations具有相同的长度。您可能希望在开头检查:

if (tests.length != expectations.length) {
    throw new IllegalArgumentException("tests and expectations are of different lengths")
}

注意现在如何从两个数组中获取相同索引的元素。

旁注:您可以使用for each格式迭代数组。这很好用:

String[] myStringArray = getStringArray();
for (String myString : myStringArray) {
    // Do something
}

您无需转换为List即可进行迭代:)