Java 如何连接字符串的变量参数

Java 如何连接字符串的变量参数,java,string,arguments,return,variadic-functions,Java,String,Arguments,Return,Variadic Functions,我需要将可变数量的参数(类型字符串)连接到一个字符串: 例如: 应该返回java,但我的实现返回jajaja 我试过这个: public static String add(String... strings) { for (String arg : strings) { return String.format(arg.concat(arg)); } return "string"; } 我做错了什么?您是在循环的第一次迭代(return String

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

例如:

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

我试过这个:

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

我做错了什么?

您是在循环的第一次迭代(
return String.format…
)而不是在最后返回。您在这里应该使用的是:

公共静态字符串添加(字符串…字符串){
StringBuilder=新的StringBuilder();
for(字符串arg:strings){
builder.append(arg);
}
return builder.toString();//输出StringBuilder的全部内容。
}

方法很多,但StringBuilder可能是最有效的:

public static String add(String... strings) {
    StringBuilder sb = new StringBuilder();
    for (String arg : strings) {
        sb.append(arg);
    }
    return sb.toString();
}
基本上,将构建器初始化为空,然后循环附加每个参数,最后返回构建器的内容

您可能希望在循环中添加一些代码来处理参数中的空值(数组不会是空的,但其中的字符串可以是空的。按原样,此方法将为空值附加字符串“null”,这可能不是您想要的。

尝试以下操作:

String result;
for (int i =0, i < strings.size(), i++){
 result += strings[i];
}
return result;
字符串结果;
对于(int i=0,i
您可以使用新的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());
String[]arr={“ja”,“va”};
可选结果=Arrays.asList(arr.parallelStream())
.reduce(新的二进制运算符(){
公共字符串应用(字符串t、字符串u){
返回t+u;
}
});
System.out.println(result.get());
将Java 8与流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));
}

为了回答您的问题,这一行是您做错的地方:

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

for each循环arg中的第一次是字符串ja。您获取该字符串并与相同的var arg连接,即ja。然后返回,这样您就永远不会进入第二次循环

若要修复,请按照其他人的建议进行操作,并使用一些方法收集和加入每个变量

若要为您提供另一个要加入的解决方案,您可以尝试只加入varargs变量。因此,您可以尝试:

返回String.join(“”,strings)


这样,无需编写循环,只需连接字符串。这假定为Java 9。

现在您可能需要使用:


String.join(separator,strings)

它可以工作,但对于大量字符串来说,它会非常低效。是的,StringBuilder更好,我只是想展示另一种连接字符串的方法。您确定要返回此返回“String”;?
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));
}