Java - 将引号附加到数组中的字符串并连接数组中的字符串
Posted
技术标签:
【中文标题】Java - 将引号附加到数组中的字符串并连接数组中的字符串【英文标题】:Java - Append quotes to strings in an array and join strings in an array 【发布时间】:2013-08-16 04:21:32 【问题描述】:我想将双引号附加到数组中的字符串,然后将它们作为单个字符串加入(保留引号)。是否有任何字符串库可以做到这一点?我已经尝试了 Apache commons StringUtils.join 和 Google guava 中的 Joiner 类,但找不到任何附加双引号的内容。
我的输入将是一个数组,如下所述:
String [] listOfStrings = "day", "campaign", "imps", "conversions";
所需的输出应如下所述:
String output = "\"day\", \"campaign\", \"imps\", \"conversions\"";
我知道我可以遍历数组并附加引号。但如果有的话,我想要一个更清洁的解决方案。
【问题讨论】:
【参考方案1】:使用 Java 8+
Java 8 具有 Collectors.joining()
及其重载。它还有String.join
。
使用Stream
和Collector
幼稚但有效的方法
String wrapWithQuotesAndJoin(List<String> strings)
return strings.stream()
.map(s -> "\"" + s + "\"")
.collect(Collectors.joining(", "));
最短且性能可能更好(不过有点骇人听闻)
String wrapWithQuotesAndJoin(List<String> strings)
return strings.stream()
.collect(Collectors.joining("\", \"", "\"", "\""));
使用String.join
非常老套。不要使用。 (但必须提到)
String wrapWithQuotesAndJoin(List<String> strings)
return strings.isEmpty() ? "" : "\"" + String.join("\", \"", strings) + "\""
使用旧版本的 Java
帮自己一个忙,使用图书馆。 Guava 立即浮现在脑海中。
使用番石榴
private static final 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 wrapWithQuotesAndJoin(List<String> strings)
return Joiner.on(", ").join(Iterables.transform(listOfStrings, addQuotes));
没有库
String wrapWithQuotesAndJoin(List<String> strings)
if (listOfStrings.isEmpty())
return "";
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();
注意事项:
所有解决方案都假定strings
是List<String>
而不是String[]
。您可以使用Arrays.asList(strings)
将String[]
转换为List<String>
。您可以使用Arrays.stream(strings)
直接从String[]
获取Stream<String>
。
Java 8+ sn-ps 使用+
连接,因为此时+
通常比StringBuilder
性能更好。
旧版本的 sn-ps 使用 StringBuilder
而不是 +
,因为它通常在旧版本上更快。
【讨论】:
【参考方案2】:String output = "\"" + StringUtils.join(listOfStrings , "\",\"") + "\"";
【讨论】:
参数颠倒:StringUtils.join("\",\"", listOfStrings)
如果 listOfStrings
为空,则打印两个引号 (""
),这在某些情况下是不可接受的。【参考方案3】:
将引号与分隔符一起添加,然后将引号附加到前后。
"\"" + Joiner.on("\",\"").join(values) + "\""
【讨论】:
【参考方案4】:您也可以自己为此功能创建代码:
String output = "";
for (int i = 0; i < listOfStrings.length; i++)
listOfStrings[i] = "\"" + listOfStrings[i] + "\"";
output += listOfStrings[i] + ", ";
【讨论】:
【参考方案5】: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”
【讨论】:
Sommes - StringUtils.join 是一个更简洁的解决方案。我想知道是否有任何库也具有附加双引号的功能。【参考方案6】:JDK 中没有可以做到这一点的方法,但是您可以使用 Apache Commons Langs StringUtls 类,StringUtils.join()
它会起作用
【讨论】:
Himanshu - 我已经在使用 StringUtils.join。我想知道我们如何将双引号附加到字符串。我很抱歉没有说清楚。我将编辑我的帖子。【参考方案7】:一个更通用的方式是 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()));
【讨论】:
以上是关于Java - 将引号附加到数组中的字符串并连接数组中的字符串的主要内容,如果未能解决你的问题,请参考以下文章
你能用 swift 将字符串附加到 Firebase 数组吗