如何格式化字符串列表

use*_*541 6 java list string-formatting

我有一个字符串列表,我想以相同的方式格式化每个字符串.例如myListOfStrings = str1,str2,str3,我的格式是(%s)我想要这样的东西:

String.format(" (%s) ", myListOfStrings)
Run Code Online (Sandbox Code Playgroud)

会输出

(str1)  (str2)  (str3)
Run Code Online (Sandbox Code Playgroud)

这样做有一种优雅的方式吗?或者我是否必须使用字符串生成器并对所有字符串执行foreach循环?

Bor*_*der 9

您可以使用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);
}
Run Code Online (Sandbox Code Playgroud)

要么:

final String joined = strings.stream()
        .map(item -> "(" + item + ")")
        .collect(joining(" "));
Run Code Online (Sandbox Code Playgroud)

你喜欢哪一个是个人偏好的问题.

第一个加入项目) (给出:

a)(b)(c

然后,您使用前缀和后缀参数joining与前缀(和后缀带),以产生正确的结果.

第二种方法是将每个项目转换为( + item + )"",然后将它们加入"".

第一个也可能有点快,因为它只需要创建一个 StringBuilder实例 - 连接和前缀/后缀.第二种方法需要创建n + 1个 StringBuilder实例,每个元素一个,另一个用于""连接.


Sha*_*her 5

如果您想要一个单行解决方案,您可以使用Apache Commons Lang 中的StringUtils.join方法之一。

String result = "(" + StringUtils.join(myListOfStrings, ") (") + ")";
Run Code Online (Sandbox Code Playgroud)