当前位置: 首页 > 知识库问答 >
问题:

Java:将List转换为join()d字符串

元景天
2023-03-14

JavaScript具有数组。join()

js>["Bill","Bob","Steve"].join(" and ")
Bill and Bob and Steve

Java有这样的东西吗?我知道我可以用StringBuilder自己拼凑一些东西:

static public String join(List<String> list, String conjunction)
{
   StringBuilder sb = new StringBuilder();
   boolean first = true;
   for (String item : list)
   {
      if (first)
         first = false;
      else
         sb.append(conjunction);
      sb.append(item);
   }
   return sb.toString();
}

...但是如果这样的东西已经是JDK的一部分,那么这样做就没有意义了。

共有3个答案

俞涵涤
2023-03-14

不是开箱即用,但许多库都有类似的:

Commons Lang:

org.apache.commons.lang.StringUtils.join(list, conjunction);

Spring:

org.springframework.util.StringUtils.collectionToDelimitedString(list, conjunction);
党浩阔
2023-03-14

所有对Apache Commons的引用都很好(这是大多数人使用的),但我认为Guava等价物Joiner具有更好的API。

您可以使用

Joiner.on(" and ").join(names)

但也很容易处理空值:

Joiner.on(" and ").skipNulls().join(names);

Joiner.on(" and ").useForNull("[unknown]").join(names);

以及(就我而言,它比commons lang更有用),处理地图的能力:

Map<String, Integer> ages = .....;
String foo = Joiner.on(", ").withKeyValueSeparator(" is ").join(ages);
// Outputs:
// Bill is 25, Joe is 30, Betty is 35

这对于调试等非常有用。

申思远
2023-03-14

使用Java 8,您可以在没有任何第三方库的情况下实现这一点。

如果要加入字符串集合,可以使用新字符串。join()方法:

List<String> list = Arrays.asList("foo", "bar", "baz");
String joined = String.join(" and ", list); // "foo and bar and baz"

如果有一个集合的类型不是String,则可以将流API与连接收集器一起使用:

List<Person> list = Arrays.asList(
  new Person("John", "Smith"),
  new Person("Anna", "Martinez"),
  new Person("Paul", "Watson ")
);

String joinedFirstNames = list.stream()
  .map(Person::getFirstName)
  .collect(Collectors.joining(", ")); // "John, Anna, Paul"

StringJoiner类也可能很有用。

 类似资料:
  • 问题内容: 我需要将由某些特定于某些语言的字母(例如HÄSTDJUR-注意Ä)组成的s 转换为不带那些特殊字母(在这种情况下为HASTDJUR)的。如何用Java做到这一点?感谢帮助! 它不是真的如何听起来。该场景如下-您要使用该应用程序,但没有瑞典语键盘。因此,您无需查看字符映射表,而是通过将特殊字母替换为拉丁字母中的典型字母来键入它。 问题答案: 我认为您的问题与此问题相同: Java-消除重

  • 问题内容: 得到了以下格式的字符串:YYYY-MM-DD- HH.MM.SS.NNNNNN时间戳记来自DB2数据库。我需要将其解析为java.sql.Timestamp,并且不要丢失任何精度。到目前为止,我一直找不到现有的代码来解析这么多毫秒。SimpleDateFormat返回一个Date,并且仅解析为毫秒。简短地看了一下JodaTime,也没有发现任何效果。 问题答案: 您是否尝试过使用?看起

  • 问题内容: 将带逗号的字符串数字(例如:835,111.2)转换为Double实例的最简单,正确的方法是什么。 谢谢。 问题答案: 看一看。例如: 根据您使用的数量类型,您可能想解析为一个。最简单的方法可能是: 或与一起使用:

  • 问题内容: 我不确定是我还是什么,但是将双精度转换为字符串时遇到问题。 这是我的代码: 我是在做错事还是在这里错过了一步。 尝试将其转换时出现错误。 我正在尝试在onTouchListener中执行此操作。病态发布更多代码,基本上是当用户触摸编辑文本框时,我希望信息计算填充编辑文本框。 问题答案: 这会将double转换为String

  • 问题内容: 我想将String转换为KeyEvent以执行以下操作: 问题答案: 我基本上是在用荣耀的声明。简单快捷: 如果要进行一些自定义键键入,则可以扩展该类并重写该type(char)方法。例如: 当然,还有改进的余地,但是你知道了。

  • 问题内容: 我有一个,我需要一个。如何从一个转换为另一个? 问题答案: 好问题。我有以下五种 6种方法可以做到这一点。 注意:返回。因此有效地两者是相同的。 调用,这又设置了数组。 另一方面,调用以下程序包私有构造函数。 从源代码中的Java 8的源代码 因此似乎是最有效的方法,在这两个存储器和速度方面,用于转换char到String。