如何连接string的变量参数

时间:2014-10-22 21:01:13

标签: java string arguments return variadic-functions

我需要将可变数量的参数(类型String)连接到一个String:

E.g:

System.out.println( add("ja", "va") );

应该返回java,但我的实现返回jaja

我试过了:

public static String add(String... strings) {
    for (String arg : strings) {
        return String.format(arg.concat(arg));
    }
    return "string";
}

我做错了什么?

7 个答案:

答案 0 :(得分:3)

将Java 8的StringJoiner与流API结合使用:

String joined = Stream.of(strings).collect(Collectors.joining());

包含在方法中,它可能如下所示:

import java.util.stream.Collectors;
import java.util.stream.Stream;

public static String join(String separator, String... strings) {
    return Stream.of(strings).collect(Collectors.joining(separator));
}

答案 1 :(得分:2)

你在循环的第一次迭代(return String.format ...)而不是在结束时返回。你应该在这里使用的是StringBuilder

public static String add(String... strings) {
    StringBuilder builder = new StringBuilder();
    for (String arg : strings) {
        builder.append(arg);
    }
    return builder.toString();  //Outputs the entire contents of the StringBuilder.
}

答案 2 :(得分:1)

现在您可能想要使用:

String.join(separator, strings)

答案 3 :(得分:0)

有很多方法,但StringBuilder可能效率最高:

public static String add(String... strings) {
    StringBuilder sb = new StringBuilder();
    for (String arg : strings) {
        sb.append(arg);
    }
    return sb.toString();
}

基本上,您将构建器初始化为空,然后遍历附加每个构建器的参数,最后返回构建器的内容。

您可能希望在循环中添加一些代码来处理参数中的空值(数组不会为null,但其中的字符串可能是。因为这个方法会附加字符串&#34 ; null"对于空值,可能不是您想要的。

答案 4 :(得分:0)

试试这个:

String result;
for (int i =0, i < strings.size(), i++){
 result += strings[i];
}
return result;

答案 5 :(得分:0)

您可以使用新的Java 8 lambdas等,

String[] arr = { "ja", "va" };
Optional<String> result = Arrays.asList(arr).parallelStream()
        .reduce(new BinaryOperator<String>() {
            public String apply(String t, String u) {
                return t + u;
            }
        });
System.out.println(result.get());

答案 6 :(得分:0)

要回答你的问题,这一行就是你做错了:

返回String.format(arg.concat(arg));

第一次在每个循环arg中将是字符串ja。你把那个字符串和concatenat与ja相同的var arg。然后你回来,所以你永远不会进入第二轮循环。

要修复,请执行其他人建议并使用某些内容来收集和加入每个变量。

为了给你另一个加入的解决方案,你可以尝试加入varargs varible。所以你可以尝试:

返回String.join('',strings);

这样,没有循环写,只需加入字符串。这假定是Java 9。