![](/img/trans.png)
[英]Is there a way to access an iteration-counter in Java's for-each loop?
[英]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.