检测Java中for-each循环的最后一次迭代

时间:2018-02-20 07:16:01

标签: java optimization foreach

我正在制作一个处理句子,单词和标点符号的程序。它从句子中删除了多余的空格。

这是我的代码:

import java.util.*;
class Prog10
{
    static void main()
    {
        Scanner sc=new Scanner(System.in);
        System.out.print("Enter a sentence:");
        String out="";        
        for(String i:sc.nextLine().split("[\\s]"))
            out+=i+(<last-iteration-condition>?"":" ");  //Using regex to clean excess spaces
        System.out.print(out);
    }
}

我想要检测最后一次迭代,除了布尔条件之外没有任何新的代码添加。 不,答案也足够了。

3 个答案:

答案 0 :(得分:1)

无法直接确定它是否是循环的最后一次迭代。

如果您知道正在迭代的数组/ Iterable的长度,您可以计算迭代次数,并在您知道它是最后一次时执行某些操作,但这有点违背了增强型for循环的要点。

很容易确定它是否是循环的第一次迭代,但是:

boolean isFirstIteration = true;
for (String i : someIterable) {
  // Do stuff.

  isFirstIteration = false;
}

您可以在您的情况下使用此方法,方法是先添加空格

String delim = "";
for(String i:sc.nextLine().split("[\\s]")) {
  out += delim + i;      
  delim = " ";
}

delim变量最初是空字符串,因此您不必在第一次迭代中插入任何内容。但是,它会被设置为空格,因此每次后续迭代都会插入一个空格,然后是i字符串。

请注意,String.join(" ", sc.nextLine().split(...))会更容易。

答案 1 :(得分:0)

这就是我提出的:

String out="";
for(String i:sc.nextLine().split("[\\s]"))        
    out+=(out.isEmpty()?"":" ")+i;  
System.out.print(out);           

答案 2 :(得分:0)

您应该使用StringJoiner将字符串连接在一起,而不是重新发明轮子。

StringJoiner out = new StringJoiner(" ");        
for(String i:sc.nextLine().split("[\\s]"))
    out.add(i);
System.out.print(out.toString());