配列内の文字列に二重引用符を追加し、後でそれらを単一の文字列として結合します(引用符を保持)。これを行う文字列ライブラリはありますか? Apache commons StringUtils.joinとGoogle guavaのJoinerクラスを試しましたが、二重引用符を追加するものが見つかりませんでした。
私の入力は、次のように配列になります。
String [] listOfStrings = {"day", "campaign", "imps", "conversions"};
必要な出力は次のとおりです。
String output = "\"day\", \"campaign\", \"imps\", \"conversions\"";
配列をループして引用符を追加できることを知っています。しかし、もしあればもっときれいなソリューションが欲しいです。
Java 8には Collectors.joining()
とそのオーバーロードがあります。 _String.join
_ もあります。
Stream
とCollector
を使用する再利用可能な関数を使用する
_Function<String,String> addQuotes = s -> "\"" + s + "\"";
String result = listOfStrings.stream()
.map(addQuotes)
.collect(Collectors.joining(", "));
_
再利用可能な機能なし
_String result = listOfStrings.stream()
.map(s -> "\"" + s + "\"")
.collect(Collectors.joining(", "));
_
Shortest(ややハックですが)
_String result = listOfStrings.stream()
.collect(Collectors.joining("\", \"", "\"", "\""));
_
String.join
_を使用する非常にハック。 wrapWithQuotesAndJoin
というメソッド以外では使用しないでください。
_String result = listOfString.isEmpty() ? "" : "\"" + String.join("\", \"", listOfStrings) + "\"";
_
あなた自身を支持し、ライブラリを使用してください。 グアバ はすぐに思い浮かびます。
_Function<String,String> addQuotes = new Function<String,String>() {
@Override public String apply(String s) {
return new StringBuilder(s.length()+2).append('"').append(s).append('"').toString();
}
};
String result = Joiner.on(", ").join(Iterables.transform(listOfStrings, addQuotes));
_
_String result;
if (listOfStrings.isEmpty()) {
result = "";
} else {
StringBuilder sb = new StringBuilder();
Iterator<String> it = listOfStrings.iterator();
sb.append('"').append(it.next()).append('"'); // Not empty
while (it.hasNext()) {
sb.append(", \"").append(it.next()).append('"');
}
result = sb.toString();
}
_
注:すべてのソリューションは、listOfStrings
が_List<String>
_ではなく_String[]
_であると想定しています。 Arrays.asList(arrayOfStrings)
を使用して、_String[]
_を_List<String>
_に変換できます。 Arrays.stream(arrayOfString)
を使用して、_Stream<String>
_から_String[]
_を直接取得できます。
String output = "\"" + StringUtils.join(listOfStrings , "\",\"") + "\"";
区切り記号とともに引用符を追加し、前後に引用符を追加します。
"\"" + Joiner.on("\",\"").join(values) + "\""
この機能のコードも自分で作成できます。
String output = "";
for (int i = 0; i < listOfStrings.length; i++)
{
listOfStrings[i] = "\"" + listOfStrings[i] + "\"";
output += listOfStrings[i] + ", ";
}
より一般的な方法はsthです。のような:
private static class QuoteFunction<F> {
char quote;
public QuoteFunction(char quote) {
super();
this.quote = quote;
}
Function<F, String> func = new Function<F,String>() {
@Override
public String apply(F s) {
return new StringBuilder(s.toString().length()+2).append(quote).append(s).append(quote).toString();
}
};
public Function<F, String> getFunction() {
return func;
}
}
...次の関数を介して呼び出します
public static <F> String asString(Iterable<F> lst, String delimiter, Character quote) {
QuoteFunction<F> quoteFunc = new QuoteFunction<F>(quote);
Joiner joiner = Joiner.on(delimiter).skipNulls();
return joiner.join(Iterables.transform(lst, quoteFunc.getFunction()));
}
JDKにはこれを実行できるメソッドはありませんが、 Apache Commons LangsStringUtls class、StringUtils.join()
を使用できます。
public static void main(String[] args) {
// TODO code application logic here
String [] listOfStrings = {"day", "campaign", "imps", "conversions"};
String output = "";
for (int i = 0; i < listOfStrings.length; i++) {
output += "\"" + listOfStrings[i] + "\"";
if (i != listOfStrings.length - 1) {
output += ", ";
}
}
System.out.println(output);
}
出力:「day」、「campaign」、「imps」、「conversions」