[英]Java, Using Scanner to input characters as UTF-8, can't print text
[英]Can't print line after looping through scanner input - Java
為什么不打印“完成”?
public class Main {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
while (s.hasNext()) {
System.out.println(s.nextInt());
}
System.out.println("done");
}
}
它可以很好地打印輸入,但是不打印完成字。
如果我在控制台中輸入以空格分隔的整數,然后按Enter鍵,則進行編輯 ,它會將我輸入的所有整數打印在單獨的行上,但是在完成所有操作之后,它不會打印完成的單詞
編輯
這行得通...但是看起來不是很優雅
public class Main {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int temp;
while (s.hasNext()) {
temp = s.nextInt();
if (temp != -99) {
System.out.println(temp);
} else {
break;
}
}
System.out.println("done");
}
}
您會看到,掃描程序阻塞了沒有字符的輸入流,而只是在等待更多。 要發信號通知流結束,必須發送“流結束”字符。 在Linux上是ctrl-d。
來自java.util.Scanner的文檔( http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html )。
Both hasNext
and next methods may block waiting for further input. Whether a hasNext method
blocks has no connection to whether or not its associated next method will block.
例如,從linux命令提示符
> javac Main.java
> java Main
> 810
810
> 22
22
> foo
java.util.InputMismatchException
> java Main
> 1
1
> ctrl-D
done
測試此問題的另一種方法是在程序中回顯一行或顯示一個文件:
> echo 2 | java Main
2
done
編輯:
鑒於以下評論中所述的預期結果; 嘗試以下操作,它將只讀一行。 解析出分隔的整數,每行一個回顯它們,然后打印完成。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
/**
*
*/
public class Main {
public static void main(String[] args) throws IOException {
String str = new BufferedReader(new InputStreamReader(System.in)).readLine();
Scanner s = new Scanner(str);
while (s.hasNext()) {
System.out.println(s.nextInt());
}
System.out.println("done");
}
}
編輯編輯:整理答案,並處理評論中的信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.