我有一个字符串列表,我想以相同的方式格式化每个字符串。例如myListOfStrings = str1,str2,str3和我的格式是(%s) 我想要这样的东西:
String.format(" (%s) ", myListOfStrings)
将输出
(str1) (str2) (str3)
有一种优雅的方式吗?或者我是否必须使用字符串构建器并对所有字符串执行foreach循环?
答案 0 :(得分:7)
您可以使用Java 8执行此操作:
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
然后使用joining
的前缀和后缀参数,前缀为(
,后缀为)
,以产生正确的结果。
第二种方法将每个项目转换为( + item + )
,然后将它们加入“”。
第一个也可能有点快,因为它只需要为连接和前缀/后缀创建一个 StringBuilder
实例。第二种方法需要创建 n + 1 StringBuilder
个实例,每个元素一个,另一个用于“”的连接。
答案 1 :(得分:2)
你可以试试这个:
List<String> list = new ArrayList<String>();
list.add("str1");
list.add("str2");
list.add("str3");
for(String s : list) {
System.out.println(String.format(" (%s) ", s));
}
答案 2 :(得分:2)
如果你想要一个单行解决方案,你可以使用Apache Commons Lang中的StringUtils.join方法之一。
String result = "(" + StringUtils.join(myListOfStrings, ") (") + ")";
答案 3 :(得分:0)
String strOut = "";
for(int i=0; i< myListOfStrings.size(); i++){
strOut = strOut +"("+myListOfStrings.get(i)+")";
}
答案 4 :(得分:0)
使用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();
}
答案 5 :(得分:0)
鲍里斯蜘蛛的答案就是我要用的,但是如果你不使用java 8,但也许你正在使用番石榴,你可以做这样的事情,虽然它有点冗长:
Joiner.on("").join(Collections2.transform(myListOfStrings, new Function<String, String>() {
@Override
public String apply(String input) {
return String.format(" (%s) ", input);
}
}));