我有Vector<String>
包含一些项目。我想在数据库中搜索这些项目。
为此,我需要在Vector
之外创建一个由逗号分隔的项组成的字符串,以便我可以将其传递给SQL Query
。
我正在做这样的事情。
StringBuilder list = new StringBuilder("");
for (String items : itemList) {
if(its last element then) //How to check here
list.append(items);
else
list.append(items+",");
}
但是这会返回"item1,item2,item3,"
如果它是Vector的最后一个元素,我想省略最后comma (,)
。
我检查了Vector API
,发现此方法lastElement()
(返回的最后一个元素不是boolean
)。
如何在循环中检查它还是有更智能/更有效的方法吗?
答案 0 :(得分:2)
这可能是Java: function for arrays like PHP's join()?
的副本不要重新发明轮子!这已经进行了很多次,单元测试和维护。所以使用它们,不要制作自己的。
您可以使用Apache Commons StringUtils并使用join上的Iterable方法(Vector是
)StringUtils.join(itemList, ", ")
另外,正如Tom在你的问题的评论中指出的那样,在Java 8中你可以使用String.join()
答案 1 :(得分:1)
查看Google Guava等图书馆
Joiner.on(",").useForNull("null").join(itemList)
答案 2 :(得分:1)
由于您使用StringBuilder
,因此删除最后一个逗号更容易:
StringBuilder list = new StringBuilder("");
for (String items : itemList) {
list.append(items).append(',');
}
if ( list.length() > 0 ) {
list.setLength(list.length() - 1 );
}
答案 3 :(得分:1)
我会选择 String.join 方法。
final List<String> itemList = Arrays.asList("item1", "item2", "item3");
final String commaSeparated = String.join(",", itemList);
System.out.println(commaSeparated); // -> item1,item2,item3
一个漂亮而干净的解决方案。仅适用于Java 8。
答案 4 :(得分:0)
按以下方式更改循环:
for (int i=0; i<itemList.size(); i++) {
list.append(itemList.get(i));
if(i != itemList.size() - 1) {
list.append(",");
}
内部向量使用数组,您现在逐个索引元素,而不是每个循环使用advance。
答案 5 :(得分:0)
有几个第三方图书馆为您提供了繁重的工作,例如Apache Commons Lang的StringUtils:
String list = StringUtils.join(items, ',');
如果您必须自己完成此操作,我将从第一个元素开始,并为每个后续元素添加逗号和元素:
StringBuilder list = new StringBuilder();
Iterator<String> iter = items.iterator();
if (iter.hasNext()) {
// Special treatment for the first item
list.append(iter.next());
// The rest of the items
while (iter.hasNext()) {
list.append(',').append(iter.next());
}
}
答案 6 :(得分:-1)
只需使用,
StringUtils.join(itemList, ", ");