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

使用StreamCollector

幼稚但有效的方法

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();

注意事项

所有解决方案都假定stringsList&lt;String&gt; 而不是String[]。您可以使用Arrays.asList(strings)String[] 转换为List&lt;String&gt;。您可以使用Arrays.stream(strings) 直接从String[] 获取Stream&lt;String&gt;。 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 - 将引号附加到数组中的字符串并连接数组中的字符串的主要内容,如果未能解决你的问题,请参考以下文章

循环遍历数组并附加到objective-C中的字符串

将数组 int 附加到字符串数组

如何将字符串数组附加到共享内存? C

你能用 swift 将字符串附加到 Firebase 数组吗

检查 UIImageView 中的图像不是占位符图像并附加到 UIImage 数组

将 JSON 数组附加到字符串数组