最佳循环成语,用于特殊外壳的最后一个元素
2022-08-31 20:08:54
在进行简单的文本处理和打印语句时,我经常遇到这种情况,其中我正在循环访问集合,并且我想对最后一个元素进行特例处理(例如,除了最后一种情况之外,每个普通元素都将以逗号分隔)。
有没有一些最佳实践习语或优雅的形式,不需要复制代码或推入if,否则在循环中。
例如,我有一个字符串列表,我想在逗号分隔的列表中打印。(do while 解决方案已经假设列表有 2 个或更多元素,否则它将与更正确的 for 循环一样糟糕)。
例如,列表 =(“狗”,“猫”,“蝙蝠”)
我想打印“[狗,猫,蝙蝠]”
我提出2种方法
-
带条件的 For 循环
public static String forLoopConditional(String[] items) { String itemOutput = "["; for (int i = 0; i < items.length; i++) { // Check if we're not at the last element if (i < (items.length - 1)) { itemOutput += items[i] + ", "; } else { // last element itemOutput += items[i]; } } itemOutput += "]"; return itemOutput; }
-
做而循环启动循环
public static String doWhileLoopPrime(String[] items) { String itemOutput = "["; int i = 0; itemOutput += items[i++]; if (i < (items.length)) { do { itemOutput += ", " + items[i++]; } while (i < items.length); } itemOutput += "]"; return itemOutput; }
测试人员类:
public static void main(String[] args) { String[] items = { "dog", "cat", "bat" }; 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(", ");
}
}