簡體   English   中英

帶空格的java輸入字符串

[英]java input string with spaces

我試圖讀取一些“問題”類型的數據,其中包含id(int),statement(string)和answer(string)。 我使用下面的代碼:

Scanner scanner = new Scanner(System.in);
System.out.print("Id (uniquely!): ");
int id = scanner.nextInt();
System.out.print("Statement : ");
String statement = scanner.next();
System.out.print("Answer:  ");
String answer = scanner.next();

如果我像這樣輸入“你是誰?” 對於“聲明”,它不等待為“回答”鍵入任何其他內容。 但如果我在我的陳述中不使用空格,它將工作得很好。 另外,如果我使用scanner.nextLine()而不是scanner.next() ,它將無法正常工作; 它將允許我只為statementanswer引入一個字符串。

有人有什么主意嗎?

嘗試添加scanner.nextLine() 之所以會發生這種情況,是因為scanner.nextInt()只讀取該數字而不是整行,因此該行的其余部分仍然存在。 你想要擺脫它,所以使用nextLine()來下一行。

它可能看起來像這樣:

Scanner scanner = new Scanner(System.in);
System.out.print("Id (unic!): ");
int id = scanner.nextInt();
//Consume rest of the line
scanner.nextLine();
System.out.print("Enunt : ");
String stat = scanner.next();
System.out.print("Raspuns:  ");
String ras = scanner.next();

改成 :

String statement = scanner.nextLine();     
String answer = scanner.nextLine();
instead of using scanner.next();

基本上當你想嘗試輸入帶空格的字符串時,請嘗試使用scanner.nextLine()而不是使用scanner.next()

next()只能讀取輸入直到空格。 它無法讀取由空格分隔的兩個單詞。 此外,next()在讀取輸入后將光標置於同一行。

nextLine()讀取包含單詞之間空格的輸入(即,它讀取直到行的結尾\\ n)。 讀取輸入后,nextLine()將光標定位在下一行。

這里, scanner.next()獲取沒有空格的令牌。 你可以試試scanner.nextLine()

你的代碼不工作的原因是:nextInt()讀取整數令牌; 因此,該行整數輸入的最后一個換行符仍在輸入緩沖區中排隊,下一個nextLine()將讀取整數行的剩余部分(為空)。

因此,您必須兩次實現nextLine()才能獲得輸出。 如下所示。

Scanner scanner = new Scanner(System.in);
System.out.print("Id (uniquely!): ");
int id = scanner.nextInt();
System.out.print("Statement : ");
scanner.nextLine();
String statement = scanner.nextLine();
System.out.print("Answer:  ");
String answer = scanner.nextLine();

或者您可以在掃描原始字符串變量之前掃描虛擬字符串變量,如下所示:

Scanner scanner = new Scanner(System.in);
System.out.print("Id (uniquely!): ");
String k = ""; //Dummy String Variable
int id = scanner.nextInt();
System.out.print("Statement : ");
k = scanner.nextLine(); // scanning of Dummy variable
String statement = scanner.nextLine();
System.out.print("Answer:  ");
String answer = scanner.nextLine();

暫無
暫無

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

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