44

在 Java 8 中,我有一些String值,我希望得到一个以逗号分隔的有效值列表。如果 aString空或为空,我想忽略它。我知道这似乎很常见,很像这个老问题;但是,该讨论并未涉及空值和空格(我也不喜欢接受的答案)。

我看过 Java 8 StringJoiner、Commons StringUtils( join) 和可信赖的 Guava ( Joiner),但似乎没有一个是完整的解决方案。愿景:

 where: val1 = "a", val2 = null, val3 = "", val4 = "b"

  String niceString = StringJoiner.use(",").ignoreBlanks().ignoreNulls()
    .add(val1).add(val2).add(val3).add(val4).toString();

...将导致niceString=a,b

没有一个很好的方法来做到这一点(不涉及 for 循环,将字符串加载到列表中,和/或正则表达式替换以删除错误条目)?

4

1 回答 1

137
String joined = 
    Stream.of(val1, val2, val3, val4)
          .filter(s -> s != null && !s.isEmpty())
          .collect(Collectors.joining(","));
于 2016-04-18T23:30:35.657 回答