我有一个常规 for
循环,可以帮助我通过利用公共for
循环提供的索引定位来追加角色。
我想重构循环并将其转换为for each
循环,但缺点是索引定位。我找不到一种方法来表明我想要追加我的字符。在这种情况下甚至可以使用for each
循环吗?
发件人:
for (int i = 0; i < itinerary.size(); i++) {
sb.append(itinerary.get(i).toUpperCase());
if (i < itinerary.size() -1) {
sb.append(" to ");
}
}
以
for (String itineray : itinerary){
sb.append(itineray.toUpperCase());
if ( //size of the array - 1){
sb.append(" to ");
}
}
答案 0 :(得分:4)
一种选择是迭代原始列表的一个子集,该子集排除最终元素。然后再做一次追加。
for (String itineray : itinerary.subList(0, itinerary.size()-1)) {
sb.append(itineray.toUpperCase());
sb.append(" to ");
}
sb.append(itinerary.get(itinerary.size()-1).toUpperCase());
请注意,从性能的角度来看,这应该与使用显式for
循环类似。唯一的区别是列表的初始子集,但在此之后,增强型循环可以在不执行任何索引检查的情况下运行。无论如何,循环外的最终附加都必须发生。
但正如@RayToal指出的那样,你可以使用它并完全避免边界条件问题:
itinerary.stream().collect(Collectors.joining(" to "))
答案 1 :(得分:1)
另一种方法是转换为String并使用replace
ArrayList<String> list = new ArrayList<>();
list.add ("one");
list.add ("two");
list.add ("three");
String output = list.toString();
output = output.replace("[", "").replace("]", "").replace(",", " to");
System.out.println(output);
<强>输出强>
一到二到三