我在执行简单的文本处理和打印语句时经常遇到这种情况,其中我循环一个集合并且我想对最后一个元素进行特殊处理(例如,除了最后一个元素之外,每个普通元素都将用逗号分隔案例)。
是否有一些最佳实践习惯用法或优雅的形式不需要重复代码或在 if、else 循环中插入。
例如,我有一个字符串列表,我想在逗号分隔的列表中打印。 (do while 解决方案已经假定列表有 2 个或更多元素,否则它与更正确的带条件的 for 循环一样糟糕)。
例如List = ("狗", "猫", " bat ")
我想打印“[dog, cat, bat]”
我介绍了两种方法
带条件的 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; }
do while 循环启动循环
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(", ");
}
}
最佳答案
我通常是这样写的:
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();
}
关于java - 特殊套管最后一个元素的最佳循环成语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3105613/