簡體   English   中英

檢測Java for-each循環中的最后一次迭代

[英]Detect last iteration in for-each loop in Java

我正在開發一個程序,用於處理句子,單詞和標點符號。 它從句子中刪除多余的空格。

這是我的代碼:

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

我想檢測上一次迭代,除了布爾條件外,不對代碼進行任何新添加。 否,答案也足夠。

無法直接確定它是否是循環的最后一次迭代。

如果您知道要迭代的數組/ 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(...))會更容易。

這是我想出的:

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

無需重新發明輪子,您應該使用StringJoiner將字符串連接在一起。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM