在Java中构建一系列分隔项的最佳方法是什么?

问题:

在Java应用程序中工作时,我最近需要组装一个以逗号分隔的值列表,以传递给另一个Web服务,而不知道提前有多少元素。最好的我可以拿出我头顶的东西就是这样的:

public String appendWithDelimiter( String original, String addition, String delimiter ) {
    if ( original.equals( "" ) ) {
        return addition;
    } else {
        return original + delimiter + addition;
    }
}

String parameterString = "";
if ( condition ) parameterString = appendWithDelimiter( parameterString, "elementName", "," );
if ( anotherCondition ) parameterString = appendWithDelimiter( parameterString, "anotherElementName", "," );

我意识到这并不是特别有效,因为在整个地方都有字符串被创建,但是我比清晰度要优于优化。
在Ruby中,我可以做这样的事情,感觉更优雅:

parameterArray = [];
parameterArray << "elementName" if condition;
parameterArray << "anotherElementName" if anotherCondition;
parameterString = parameterArray.join(",");
&#91;/code&#93;
但是由于Java缺少join命令,所以我找不到任何等同的东西。
那么在Java中最好的方法是什么?

<h4>回答:</h4>
<h3>前Java 8:</h3>
Apache的commons lang是你的朋友,它提供了一个非常类似于Ruby引用的连接方法:
 <a href="http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#join(java.lang.Iterable,%20char)" rel="noreferrer"><code>StringUtils.join(java.lang.Iterable,char)</code></a>
<h3>Java 8:</h3>
Java 8通过<code>StringJoiner</code>和<code>String.join()</code>提供了开箱即用的功能。下面的代码段显示了如何使用它们:
 <a href="https://docs.oracle.com/javase/8/docs/api/java/util/StringJoiner.html" rel="noreferrer"><code>StringJoiner</code></a>

StringJoiner joiner = new StringJoiner(",");
joiner.add("01").add("02").add("03");
String joinedString = joiner.toString(); // "01,02,03"

 String.join(CharSequence delimiter, CharSequence... elements))

String joinedString = String.join(" - ", "04", "05", "06"); // "04 - 05 - 06"

 String.join(CharSequence delimiter, Iterable<? extends CharSequence> elements)

List<String> strings = new LinkedList<>();
strings.add("Java");strings.add("is");
strings.add("cool");
String message = String.join(" ", strings);
//message returned is: "Java is cool"

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: What's the best way to build a string of delimited items in Java?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

51 − = 48