Java 如何将字符串列表格式化为

Java 如何将字符串列表格式化为,java,list,string-formatting,Java,List,String Formatting,我有一个字符串列表,我希望以相同的方式格式化每个字符串。e、 g.myListOfStrings=str1、str2、str3,我的格式是(%s) 我想要这样的东西: String.format(" (%s) ", myListOfStrings) 将输出 (str1) (str2) (str3) 有没有一种优雅的方法?或者我必须使用字符串生成器并对所有字符串执行foreach循环吗?string strOut=“”; String strOut = ""; for(int i=0; i

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

String.format(" (%s) ", myListOfStrings)
将输出

(str1)  (str2)  (str3)
有没有一种优雅的方法?或者我必须使用字符串生成器并对所有字符串执行foreach循环吗?

string strOut=“”;
String strOut = "";
for(int i=0; i< myListOfStrings.size(); i++){
    strOut = strOut +"("+myListOfStrings.get(i)+")";
}
对于(int i=0;i
您可以使用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);
}
你喜欢哪一个是个人喜好的问题

第一个连接
)(
上的项目,其中给出:

a) (b)(c)

然后使用前缀和后缀参数将与前缀为
和后缀为
)的
连接起来,以生成正确的结果

第二个备选方案将每个项转换为
(+item+)
,然后在“”上联接它们

第一种方法也可能更快一些,因为它只需要为连接和前缀/后缀创建一个StringBuilder实例。第二种方法需要创建n+1
StringBuilder
实例,每个元素一个,连接上一个.

您可以尝试以下方法:

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));
}
List List=new ArrayList();
列表。添加(“str1”);
列表。添加(“str2”);
列表。添加(“str3”);
用于(字符串s:列表){
System.out.println(String.format((%s)”,s));
}

若您想要一个单行解决方案,可以使用ApacheCommonsLang中的一种方法

String result = "(" + StringUtils.join(myListOfStrings, ") (") + ")";
使用Java8迭代集合的新方法:

public static String format(List<String> list) {
    StringBuilder sb = new StringBuilder();
    list.forEach(x -> sb.append(String.format(" (%s) ", x)));
    return sb.toString();
} 
公共静态字符串格式(列表){
StringBuilder sb=新的StringBuilder();
list.forEach(x->sb.append(String.format((%s)”,x));
使某人返回字符串();
} 

请在此处尝试:

Boris蜘蛛的答案就是我想要的,但如果您不使用java 8,但可能您使用的是番石榴,您可以这样做,尽管有点冗长:

Joiner.on("").join(Collections2.transform(myListOfStrings, new Function<String, String>() {

        @Override
        public String apply(String input) {
            return String.format(" (%s) ", input);
        }
    }));
Joiner.on(“”).join(Collections2.transform(myListOfStrings,new Function()){
@凌驾
公共字符串应用(字符串输入){
返回字符串。格式((%s)”,输入);
}
}));

您使用的是Java 8吗?StringBuilder看起来很明显,您能提供一个代码示例(使用SB)让我们更好地理解您的意思吗或者使用字符串缓冲区。你的列表不能有一个包装器类吗?这类似于我的第二个选择,效率较低。而且,OP看起来不希望输出预先/用空格固定-你应该像我在代码中那样加入空格。恩-我一点也不喜欢这样。它将格式与输出混合在一起是一种非常丑陋的方式。它也应该使用
printf
,而不是同时使用
格式和
打印
。或者使用
映射
,然后使用
打印
。不管怎样,我认为这都不是一个好方法。@Boristeider(同意printf,但-)它比stream/map/collect和joining更具可读性forms@BoristheSpider你曾经使用过记录器吗?如果出于调试目的而不是为了业务逻辑而进行日志记录。你的新代码要好得多,但我认为如果你有
StringBuilder
,那么就使用一个-完全跳过
格式及其开销你能不能请你的答案解释一下为什么这个代码会回答这个问题?只有代码的答案是,因为它们不会教你答案。
Joiner.on("").join(Collections2.transform(myListOfStrings, new Function<String, String>() {

        @Override
        public String apply(String input) {
            return String.format(" (%s) ", input);
        }
    }));