JavaScript有 Array.join()
js>["Bill","Bob","Steve"].join(" and ")
Bill and Bob and Steve
Run Code Online (Sandbox Code Playgroud)
Java有这样的东西吗?我知道我可以用StringBuilder自己解决一些问题:
static public String join(List<String> list, String conjunction)
{
StringBuilder sb = new StringBuilder();
boolean first = true;
for (String item : list)
{
if (first)
first = false;
else
sb.append(conjunction);
sb.append(item);
}
return sb.toString();
}
Run Code Online (Sandbox Code Playgroud)
...但是,如果像这样的东西已经是JDK的一部分,那就没有意义了.
在Java应用程序中工作时,我最近需要组装一个以逗号分隔的值列表,以传递给另一个Web服务,而无需事先知道有多少元素.我能想出的最好的东西是这样的:
public String appendWithDelimiter( String original, String addition, String delimiter ) {
if ( original.equals( "" ) ) {
return addition;
} else {
return original + delimiter + addition;
}
}
String parameterString = "";
if ( condition ) parameterString = appendWithDelimiter( parameterString, "elementName", "," );
if ( anotherCondition ) parameterString = appendWithDelimiter( parameterString, "anotherElementName", "," );
Run Code Online (Sandbox Code Playgroud)
我意识到这不是特别有效,因为在整个地方都会创建字符串,但我的目的是为了清晰而不是优化.
在Ruby中,我可以做这样的事情,感觉更优雅:
parameterArray = [];
parameterArray << "elementName" if condition;
parameterArray << "anotherElementName" if anotherCondition;
parameterString = parameterArray.join(",");
Run Code Online (Sandbox Code Playgroud)
但由于Java缺少连接命令,我无法弄清楚任何等价物.
那么,在Java中执行此操作的最佳方法是什么?
给定一个字符串集合,如何在不使用外部库的情况下将它们加入普通Java中?
鉴于以下变量:
Collection<String> data = Arrays.asList("Snap", "Crackle", "Pop");
String separator = ", ";
String joined; // let's create this, shall we?
Run Code Online (Sandbox Code Playgroud)
这就是我在Guava中的表现:
joined = Joiner.on(separator).join(data);
Run Code Online (Sandbox Code Playgroud)
joined = StringUtils.join(data, separator);
Run Code Online (Sandbox Code Playgroud)
但是在简单的Java中,真的没有比这更好的方法吗?
StringBuilder sb = new StringBuilder();
for(String item : data){
if(sb.length()>0)sb.append(separator);
sb.append(item);
}
joined = sb.toString();
Run Code Online (Sandbox Code Playgroud)