我想将双引号附加到数组中的字符串,然后将它们作为单个字符串连接(保留引号)。有没有这样做的字符串库?我在Google番石榴中尝试过Apache commons StringUtils.join和Joiner类,但找不到附加双引号的内容。
我的输入将是如下所述的数组:
String [] listOfStrings = {"day", "campaign", "imps", "conversions"};
所需的输出应如下所述:
String output = "\"day\", \"campaign\", \"imps\", \"conversions\"";
我知道我可以遍历数组并附加引号。但是如果有的话,我想要一个更清洁的解决方案。
答案 0 :(得分:87)
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(", "));
最短(虽然有点hackish)
String result = listOfStrings.stream()
.collect(Collectors.joining("\", \"", "\"", "\""));
String.join
非常hackish。请勿在名为wrapWithQuotesAndJoin
的方法中使用。
String result = listOfString.isEmpty() ? "" : "\"" + String.join("\", \"", listOfStrings) + "\"";
帮自己一个忙,并使用图书馆。我会立刻想到Guava。
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[]
。您可以使用String[]
将List<String>
转换为Arrays.asList(arrayOfStrings)
。您可以使用Stream<String>
直接从String[]
获取Arrays.stream(arrayOfString)
。
答案 1 :(得分:9)
String output = "\"" + StringUtils.join(listOfStrings , "\",\"") + "\"";
答案 2 :(得分:2)
将引号与分隔符一起添加,然后将引号附加到正面和背面。
"\"" + Joiner.on("\",\"").join(values) + "\""
答案 3 :(得分:0)
您也可以自己创建此功能的代码:
String output = "";
for (int i = 0; i < listOfStrings.length; i++)
{
listOfStrings[i] = "\"" + listOfStrings[i] + "\"";
output += listOfStrings[i] + ", ";
}
答案 4 :(得分:0)
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”
答案 5 :(得分:0)
JDK中没有可以执行此操作的方法,但您可以使用Apache Commons Langs StringUtls类,StringUtils.join()
它将起作用
答案 6 :(得分:0)
更通用的方式是......像:
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()));
}