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

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

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

原文由 Sean McMains 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 445
2 个回答

Java 8 之前:

Apache 的 commons lang 是你的朋友——它提供了一种与你在 Ruby 中提到的方法非常相似的连接方法:

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


Java 8:

Java 8 通过 StringJoinerString.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"

原文由 Martin Gladdish 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以编写一个适用于 java.util.Lists 的小型连接式实用程序方法

public static String join(List<String> list, String delim) {

    StringBuilder sb = new StringBuilder();

    String loopDelim = "";

    for(String s : list) {

        sb.append(loopDelim);
        sb.append(s);

        loopDelim = delim;
    }

    return sb.toString();
}

然后像这样使用它:

     List<String> list = new ArrayList<String>();

    if( condition )        list.add("elementName");
    if( anotherCondition ) list.add("anotherElementName");

    join(list, ",");

原文由 Rob Dickerson 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题