【问题标题】:Is there a way to join strings, each with a specific surrounding string?有没有办法连接字符串,每个字符串都有一个特定的周围字符串?
【发布时间】:2013-11-25 21:21:53
【问题描述】:

我希望使用 guava 的 JoinerList<String> 加入一个字符串,但列表中的每个字符串周围都有周围的字符串。所以我想列出一个字符串:

List<String> names = Arrays.asList("John", "Mary", "Henry");

并生成这个字符串:

"your guest John is here, your guest Mary is here, your guest Henry is here"

我看到的使用 Joiner 的示例似乎是生成用逗号分隔的 3 个名称,但我希望用一些额外的字符串包围每个字符串(每次都是相同的字符串)。

我希望我在这里足够清楚。感谢您的帮助。

【问题讨论】:

标签: java string guava


【解决方案1】:

首先要进行转换:

 Joiner.on(", ").join(Iterables.transform(names, new Function<String, String>() {
   public String apply(String str) { return "your guest " + str + " is here"; }
 }));

【讨论】:

  • F* 是的,函数式编程!
  • 对于 Java 8,names.stream().map(name -&gt; "your guest " + name + " is here").collect(Collectors.joining(", ")
【解决方案2】:

怎么样

    String str = "your guest " + Joiner.on(" is here, your guest ").join(names) + " is here";

【讨论】:

  • 我的猜测是 Natix 指的是部分文本被硬编码两次的事实
【解决方案3】:

如果 Joiner 不是必须的,你可以使用String.format()

public static void main(String[] args) {
        List<String> names = Arrays.asList("John", "Mary", "Henry");
        StringBuilder builder = new StringBuilder();

        for(int i=0; i<names.size();i++){
            builder.append(String.format("your guest %s is here, ", names.get(i)));
        }
        System.out.println(builder.substring(0,builder.length()-2).toString());
    }

【讨论】:

  • Joiner 的全部意义在于避免此类解决方案,因此 +0。此外,您不应该将result 连接到循环中,而是将append 的新部分连接到StringBuilder
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-07
  • 1970-01-01
  • 2021-10-04
  • 1970-01-01
  • 2022-01-08
  • 2013-07-05
  • 1970-01-01
相关资源
最近更新 更多