繁体   English   中英

如何连接字符串的可变参数

[英]How to concatenate variable arguments of string

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

例如:

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";
}

我究竟做错了什么?

将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));
}

您将在循环的第一个迭代中return String.format ...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.
}

如今,您可能想使用:

String.join(separator, strings)

有很多方法,但是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;

您可以使用新的Java 8 lambda,例如

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.format(arg.concat(arg));

每个循环arg中的第一次是字符串ja。 您可以使用相同的var arg ja来获取该字符串并连接。 然后您返回,因此您永远不会进入第二轮循环。

要解决此问题,请执行他人的建议,并使用一些东西来收集和加入每个变量。

为了给您另一个加入的解决方案,您可以尝试仅加入varargs变量。 因此,您可以尝试:

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

这样,无需编写循环,只需连接字符串即可。 假设使用Java 9。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM