我有一个字符串列表,我想以相同的方式格式化每个字符串,例如:myListOfStrings = str1,str2,str3,我的格式是(%s) 我想要像这样的东西:
String.format(" (%s) ", myListOfStrings)
将输出
(str1) (str2) (str3)
有没有一种优雅的方法来做到这一点?或者我必须使用字符串构建器并在所有字符串上进行foreach循环吗?
我有一个字符串列表,我想以相同的方式格式化每个字符串,例如:myListOfStrings = str1,str2,str3,我的格式是(%s) 我想要像这样的东西:
String.format(" (%s) ", myListOfStrings)
将输出
(str1) (str2) (str3)
有没有一种优雅的方法来做到这一点?或者我必须使用字符串构建器并在所有字符串上进行foreach循环吗?
import static java.util.stream.Collectors.joining;
public static void main(String[] args) throws Exception {
final List<String> strings = Arrays.asList("a", "b", "c");
final String joined = strings.stream()
.collect(joining(") (", "(", ")"));
System.out.println(joined);
}
或者:final String joined = strings.stream()
.map(item -> "(" + item + ")")
.collect(joining(" "));
哪种方法更好,这是一个个人的偏好问题。
第一种方法使用 ) (
将项目合并,得到:
a) (b) (c
然后使用前缀和后缀参数来将前缀设为 (
以及后缀设为 )
,以产生正确的结果。
第二种方法将每个项目转换为 ( + item + )
,然后在 " " 上将它们连接起来。
第一种方法可能会更快一些,因为它只需要创建一个 StringBuilder 实例——用于连接和前缀/后缀。而第二种方法需要创建 n + 1 个 StringBuilder
实例,一个用于每个元素,另一个用于连接 " "。
如果您想要一行代码的解决方案,您可以使用Apache Commons Lang中StringUtils.join方法之一。
String result = "(" + StringUtils.join(myListOfStrings, ") (") + ")";
List<String> list = new ArrayList<String>();
list.add("str1");
list.add("str2");
list.add("str3");
for(String s : list) {
System.out.print(String.format(" (%s) ", s));
}
String strOut = "";
for(int i=0; i< myListOfStrings.size(); i++){
strOut = strOut +"("+myListOfStrings.get(i)+")";
}
使用Java8的新forEach
方法来迭代集合:
public static String format(List<String> list) {
StringBuilder sb = new StringBuilder();
list.forEach(x -> sb.append(String.format(" (%s) ", x)));
return sb.toString();
}
printf
而不是同时使用 format
和 print
。或者使用一个 map
然后再用 print
。无论哪种方式,我认为这都不是一个好的方法。 - Boris the SpiderStringBuilder
就应该使用它 - 完全跳过 format
和它的开销... - Boris the SpiderBoris The Spider 的回答是我会选择的,但如果你不是使用 Java 8,而是使用 Guava,你可以做类似这样的事情,尽管有点啰嗦:
Joiner.on("").join(Collections2.transform(myListOfStrings, new Function<String, String>() {
@Override
public String apply(String input) {
return String.format(" (%s) ", input);
}
}));