Javaで区切られた項目の文字列を構築する最良の方法は何ですか? 質問する

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 でこれを行う最善の方法は何でしょうか?

ベストアンサー1

Java 8以前:

ここでは Apache の commons lang が役に立ちます。これは、Ruby で参照する join メソッドと非常によく似た join メソッドを提供します。

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


Java8:

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"

おすすめ記事