在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中执行此操作的最佳方法是什么?
有没有办法确定循环是否最后一次迭代.我的代码看起来像这样:
int[] array = {1, 2, 3...};
StringBuilder builder = new StringBuilder();
for(int i : array)
{
builder.append("" + i);
if(!lastiteration)
builder.append(",");
}
Run Code Online (Sandbox Code Playgroud)
现在问题是我不想在最后一次迭代中附加逗号.现在有一种方法可以确定它是最后一次迭代还是我坚持使用for循环或使用外部计数器来跟踪.
在Java中用逗号分隔列表最清晰的方法是什么?
我知道几种方法,但我想知道最好的方法是什么("最佳"意味着最清晰和/或最短,而不是最有效.
我有一个列表,我想循环它,打印每个值.我想在每个项目之间打印一个逗号,但不是在最后一个项目之后(也不是在第一个项目之前).
List --> Item ( , Item ) *
List --> ( Item , ) * Item
Run Code Online (Sandbox Code Playgroud)
样品溶液1:
boolean isFirst = true;
for (Item i : list) {
if (isFirst) {
System.out.print(i); // no comma
isFirst = false;
} else {
System.out.print(", "+i); // comma
}
}
Run Code Online (Sandbox Code Playgroud)
示例解决方案2 - 创建子列表:
if (list.size()>0) {
System.out.print(list.get(0)); // no comma
List theRest = list.subList(1, list.size());
for (Item i : theRest) {
System.out.print(", "+i); // comma
}
}
Run Code Online (Sandbox Code Playgroud)
样品溶液3:
Iterator<Item> i = …Run Code Online (Sandbox Code Playgroud) 这非常简单,但我看到了许多变种,我在其他地方看不到自己的做法.鉴于:
Iterable<String> strings;
Run Code Online (Sandbox Code Playgroud)
创建一个包含所有字符串的String,以逗号分隔.