1. ホーム

[解決済み】Javaで区切りの良い文字列を作るにはどうすればいい?

2022-04-18 08:31:46

質問

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でこれを行うには、どのような方法があるのでしょうか?

どのように解決するのか?

Java8以前のバージョン。

Apacheのcommons langは、あなたがRubyで参照しているものと非常によく似たjoinメソッドを提供しています。

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"