Java - 将引号附加到数组中的字符串并连接数组中的字符串

Ana*_*and 40 java apache-commons guava

我想将双引号附加到数组中的字符串,然后将它们作为单个字符串连接(保留引号).有没有这样做的字符串库?我已经尝试过Apache commons StringUtils.join和Google番石榴中的Joiner类,但找不到附加双引号的内容.

我的输入将是一个数组,如下所述:

String [] listOfStrings = {"day", "campaign", "imps", "conversions"};
Run Code Online (Sandbox Code Playgroud)

所需的输出应如下所述:

String output = "\"day\", \"campaign\", \"imps\", \"conversions\"";
Run Code Online (Sandbox Code Playgroud)

我知道我可以遍历数组并附加引号.但是如果有的话,我想要一个更清洁的解决方案.

Oli*_*ire 95

使用Java 8+

Java 8有Collectors.joining()它的重载.它也有String.join.

使用a Stream和aCollector

具有可重复使用的功能

Function<String,String> addQuotes = s -> "\"" + s + "\"";

String result = listOfStrings.stream()
  .map(addQuotes)
  .collect(Collectors.joining(", "));
Run Code Online (Sandbox Code Playgroud)

没有任何可重复使用的功能

String result = listOfStrings.stream()
  .map(s -> "\"" + s + "\"")
  .collect(Collectors.joining(", "));
Run Code Online (Sandbox Code Playgroud)

最短(虽然有点hackish)

String result = listOfStrings.stream()
  .collect(Collectors.joining("\", \"", "\"", "\""));
Run Code Online (Sandbox Code Playgroud)

运用 String.join

非常hackish.除了在一个叫做的方法之外,不要使用wrapWithQuotesAndJoin.

String result = listOfString.isEmpty() ? "" : "\"" + String.join("\", \"", listOfStrings) + "\"";
Run Code Online (Sandbox Code Playgroud)

使用旧版本的Java

帮自己一个忙,并使用图书馆.番石榴立即浮现在脑海中.

使用番石榴

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));
Run Code Online (Sandbox Code Playgroud)

没有图书馆

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();
}
Run Code Online (Sandbox Code Playgroud)

注意:所有解决方案都假设listOfStrings是一个List<String>而不是一个String[].您可以将a String[]转换为List<String>使用Arrays.asList(arrayOfStrings).您可以Stream<String>直接从String[]使用中获得Arrays.stream(arrayOfString).


Sif*_*eng 10

String output = "\"" + StringUtils.join(listOfStrings , "\",\"") + "\"";
Run Code Online (Sandbox Code Playgroud)