小编典典

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

all

在 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(",");

但是由于 Java 缺少连接命令,所以我想不出任何等效的东西。

那么,在 Java 中执行此操作的最佳方法是什么?


阅读 71

收藏
2022-04-01

共1个答案

小编典典

Java 8 之前:

Apache 的 commons lang 在这里是你的朋友——它提供了一种与你在 Ruby 中引用的非常相似的 join 方法:

StringUtils.join(java.lang.Iterable,char)


爪哇 8:

StringJoinerJava 8 通过和提供开箱即用的连接String.join()。下面的片段显示了如何使用它们:

StringJoiner

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"
2022-04-01