在执行简单的文本处理和print语句时,我经常遇到这种情况,我循环遍历一个集合,并且希望将最后一个元素作为特殊情况(例如,除了最后一个情况之外,每个正常元素都会用逗号分隔)。
是否有一些最佳实践习惯用法或优雅的形式,不需要重复代码或在循环中推入if和else。
例如,我有一个字符串列表,我希望以逗号分隔的列表打印这些字符串。( do while解决方案已经假设列表有2个或更多的元素,否则它将与更正确的for循环条件一样糟糕)。
例如List =(“狗”,“猫”,“蝙蝠”)
我想打印“狗,猫,蝙蝠”
我给出了两种方法
带条件的
公共静态字符串项目(String[] items) { String itemOutput = "[";for (int i= 0;i< items.length;i++) { //如果(i < (items.length - 1)) { itemOutput += itemsi + ",";} else { // last element itemOutput += itemsi;}} itemOutput += "]";返回itemOutput;}
公共静态字符串doWhileLoopPrime(String[] items) { String itemOutput = "[";int i= 0;itemOutput += itemsi++;if (i < (items.length)) { do { itemOutput += ",“+ itemsi++;} while (i < items.length);} itemOutput += "]";return itemOutput;}
测试人员类:
公共静态空main(String[] args) { String[] items ={“狗”,“猫”,“蝙蝠”};System.out.println(forLoopConditional(items));System.out.println(doWhileLoopPrime(items));}
在Java AbstractCollection类中,它有以下实现(有点冗长,因为它包含所有的边缘情况错误检查,但还不错)。
public String toString() {
Iterator<E> i = iterator();
if (! i.hasNext())
return "[]";
StringBuilder sb = new StringBuilder();
sb.append('[');
for (;;) {
E e = i.next();
sb.append(e == this ? "(this Collection)" : e);
if (! i.hasNext())
return sb.append(']').toString();
sb.append(", ");
}
}
发布于 2010-06-26 06:11:56
在这些答案中有很多for循环,但我发现迭代器和while循环读起来要容易得多。例如:
Iterator<String> itemIterator = Arrays.asList(items).iterator();
if (itemIterator.hasNext()) {
// special-case first item. in this case, no comma
while (itemIterator.hasNext()) {
// process the rest
}
}
这是Joiner在谷歌集合中采用的方法,我发现它非常可读性很强。
发布于 2010-06-24 06:23:34
我通常是这样写的:
static String commaSeparated(String[] items) {
StringBuilder sb = new StringBuilder();
String sep = "";
for (String item: items) {
sb.append(sep);
sb.append(item);
sep = ",";
}
return sb.toString();
}
发布于 2010-06-24 05:53:55
string value = "[" + StringUtils.join( items, ',' ) + "]";
https://stackoverflow.com/questions/3105613
复制相似问题