Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用分隔符连接字符串值以处理空字符串和空字符串?_Java_Java 8_Guava_Apache Stringutils - Fatal编程技术网

Java 使用分隔符连接字符串值以处理空字符串和空字符串?

Java 使用分隔符连接字符串值以处理空字符串和空字符串?,java,java-8,guava,apache-stringutils,Java,Java 8,Guava,Apache Stringutils,在Java8中,我有一些String值,我希望最后得到一个逗号分隔的有效值列表。如果字符串为null或空我想忽略它。我知道这似乎很常见,也很像;然而,这种讨论并没有涉及空值和空格(我也不喜欢公认的答案) 我看过Java8StringJoiner、CommonsStringUtils(join)和可靠的番石榴(Joiner),但似乎都不是一个完整的解决方案。愿景: where: val1 = "a", val2 = null, val3 = "", val

在Java8中,我有一些
String
值,我希望最后得到一个逗号分隔的有效值列表。如果
字符串
null或空我想忽略它。我知道这似乎很常见,也很像;然而,这种讨论并没有涉及空值和空格(我也不喜欢公认的答案)

我看过Java8
StringJoiner
、Commons
StringUtils
join
)和可靠的番石榴(
Joiner
),但似乎都不是一个完整的解决方案。愿景:

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

  String niceString = StringJoiner.use(",").ignoreBlanks().ignoreNulls()
    .add(val1).add(val2).add(val3).add(val4).toString();
…将导致
nicesestring
=
a、b


有没有一种很好的方法可以做到这一点(不涉及for循环、将字符串加载到列表和/或regex替换以删除坏条目)?

简单的java 8方法是
Stream.of(val1,val2,val3,val4)。filter(s->s!=null&&!s.isEmpty()).collect(加入(“,”)
静态导入
收集器。加入
。如果这不符合你的喜好,你就必须自己创建一个类或在某个库中找到一个类。但为什么要麻烦呢?也许是标题的重复,但不是内涵的重复。Java 8中的答案不完全符合您的要求吗?用户需要从他们的头脑中了解重复是不好的。如果一个解决方案存在,我们应该指向它,而不是把知识分散到每一个地方。请投票决定是否关闭,如果答案适用,请在此处提供。@Brian Goetz(主要Java架构师之一)回答的支柱问题会自动成为其他人应作为重复目标使用的问题(他是Java 8的Jon Skeet)。@Brian如果所有var1、var2。。。是否为空?@OptimusPrime传递给
joining()
的分隔符是分隔符。如果所有元素都为null,则它们都会被过滤,因此呈现给
collect()
的流为空。在这种情况下,您将得到一个空字符串。还有其他版本的
joining()
也允许您指定前缀和后缀,在这种情况下,您将获得
前缀+后缀
。是的,只需使用
collectingAndThen()
和一个将
映射到
null
的完成函数。
String joined = 
    Stream.of(val1, val2, val3, val4)
          .filter(s -> s != null && !s.isEmpty())
          .collect(Collectors.joining(","));