[英]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.