我正在制作一个处理句子,单词和标点符号的程序。它从句子中删除了多余的空格。
这是我的代码:
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);
}
}
我想要检测最后一次迭代,除了布尔条件之外没有任何新的代码添加。 不,答案也足够了。
答案 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());