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

标签 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);
    }
}

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

最佳答案

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

如果您知道正在迭代的数组/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(...)) 会更容易。

关于java - 检测 Java 中 for-each 循环的最后一次迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48879719/

相关文章:

java - "hot deploy"的限制是什么?

python - 带 ILU 预处理器的一般最小残差 (GMRES)

sql userid + name + profile 优化问题

php - json_decode, foreach 只从 json 字符串返回一行

perl - 如何将@ARGV 的第一个值与可能的选项数组匹配

foreach - 显示并执行

java.sql.SQLException : Before start of result set 异常

java - 将 URI 转换为仅包含主机、端口和路径的字符串

Java对象、接口(interface)

c++ - 在运行时从 xml 文件构建对象并一次性初始化?