欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java之Scanner.nextLine()讀取回車的問題及解決

 更新時間:2023年04月03日 14:10:53   作者:蒙塔基的小黃油餅干  
這篇文章主要介紹了Java之Scanner.nextLine()讀取回車的問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

問題描述

我們在使用java讀取鍵盤輸入時,如果先讀取一個int變量,再讀取下一行的字符串時,會發(fā)現(xiàn)程序運行結(jié)果與預(yù)期不符,程序并沒有讀取到下一行的字符串。

即發(fā)生在如下情形:

Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
String s=sc.nextLine();

問題分析

從代碼分析我們的需求是先輸入一個int變量,再在下一行輸入一個字符串,也就是說我們使用鍵盤輸入的時候,其實輸入了三部分:

3
words

分別是:數(shù)字3,換行符,字符串words。

如何處理多出來的換行符

從剛才的分析可以看到,問題的原因是nextLine()方法沒有讀取到我們的字符串,而是讀入了我們的Enter換行符。

方法一

既然多出了一個換行符,那我們可以在讀取字符串之前將換行符讀掉:

Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
sc.nextLine();//將換行符讀掉
String s=sc.nextLine();

方法二

重新創(chuàng)建Scanner對象:

Scanner sc1=new Scanner(System.in);
int n=sc1.nextInt();
Scanner sc2=new Scanner(System.in);
String s=sc2.nextLine();

這樣在讀取完n之后,換行符會被丟棄,下一行被視作sc2開始讀入的位置。

實戰(zhàn)

下面是tengxun公司2020年4月26日暑期軟件相關(guān)崗位實習(xí)筆試的第一題:

數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)之一一隊列

隊列有五種基本操作,插入隊尾、取出隊首、刪除隊首、隊列大小、清空隊列。

現(xiàn)在讓你模擬一個隊列的操作,具體格式參考輸入。

輸入描述:

第一行輸入一個整數(shù)T,表示接下來有T組測試數(shù)據(jù)。
對于每組測試數(shù)據(jù):
第一行輸入一個整數(shù)Q,表示有Q次操作。
接下來Q行,每行輸入一種隊列操作方式,具體格式如下:
初始狀態(tài)下隊列為空。
插入隊尾: PUSH X
取出隊首: TOP//僅僅是看一下隊首元素,不要把隊首元素刪除
刪除隊首: POP
隊列大小: SIZE
清空隊列: CLEAR
1<T<100
1<Q,X≤1000
保證操作為以上5種的任意一種。

輸出描述:

對于每組測試數(shù)據(jù):
如果操作為“取出隊首”,輸出隊首元素,如果無法取出,輸出“-1”
如果操作為“刪除隊首”,如果無法刪除,輸出“-1”
如果操作為“隊列大小”,輸出隊列大小
其他操作無需輸出

示例輸入

2
7
PUSH 1
PUSH 2
TOP
POP
TOP
POP
POP
5
PUSH 1
PUSH 2
SIZE
POP
SIZE

結(jié)果:

1
2
-1
2
1

問題解答

這道題并不難,使用LinkedList就可以實現(xiàn)上述操作,當(dāng)然,Queue的底層實現(xiàn)本來也就是LinkedList。

之所以列舉這道題是因為這道題會出現(xiàn)nextLine()讀取失敗的問題,因為我們首先要讀取整形變量T,之后再往后逐行讀取,如果不處理換行符的問題,將導(dǎo)致程序運行出現(xiàn)異常。

我的AC答案:

import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;

public class Main {
? ? public static void main(String[] args) {
? ? ? ? Scanner sc =new Scanner(System.in);
? ? ? ? int t=sc.nextInt();
? ? ? ? while(t>0){
? ? ? ? ? ? int q=sc.nextInt();
? ? ? ? ? ? List<Integer> n=new LinkedList<>();
? ? ? ? ? ? for(int i=0;i<=q;i++){//注意!i<=q,這里的‘='就是因為q和第一行輸入之間的換行符
? ? ? ? ? ? ? ? String s=sc.nextLine();
? ? ? ? ? ? ? ? if(s.equals("")){//在這道題中,當(dāng)我讀取到換行符時,直接跳過,不做任何操作
? ? ? ? ? ? ? ? ? ? continue;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? if(s.startsWith("PUSH")){
? ? ? ? ? ? ? ? ? ? n.add(Integer.parseInt(s.split(" ")[1]));
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? else if(s.equals("TOP")){
? ? ? ? ? ? ? ? ? ? if(n.size()==0){
? ? ? ? ? ? ? ? ? ? ? ? System.out.println(-1);
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? else
? ? ? ? ? ? ? ? ? ? ? ? System.out.println(n.get(0));
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? else if(s.equals("POP")){
? ? ? ? ? ? ? ? ? ? if(n.isEmpty()){
? ? ? ? ? ? ? ? ? ? ? ? System.out.println(-1);
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? else
? ? ? ? ? ? ? ? ? ? ? ? n.remove(0);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? else if(s.equals("SIZE")){
? ? ? ? ? ? ? ? ? ? System.out.println(n.size());
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? else if(s.equals("CLEAR")){
? ? ? ? ? ? ? ? ? ? n.clear();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? t--;
? ? ? ? }
? ? }
}

在上面的代碼中,我首先使用了

for(int i=0;i<=q;i++)

注意到了q與接下來的輸入之間的換行符。

之后,當(dāng)遇到換行符時:

String s=sc.nextLine();
if(s.equals(""))
? ? continue;

來解決該問題。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java元注解@Inherited的使用詳解

    java元注解@Inherited的使用詳解

    這篇文章主要介紹了java元注解@Inherited的使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • 論java如何通過反射獲得方法真實參數(shù)名及擴展研究

    論java如何通過反射獲得方法真實參數(shù)名及擴展研究

    這篇文章主要為大家介紹了java如何通過反射獲得方法的真實參數(shù)名以及擴展研究,有需要的朋友可以借鑒參考下,希望能夠有所幫助祝大家多多進步早日升職加薪
    2022-01-01
  • java——多線程基礎(chǔ)

    java——多線程基礎(chǔ)

    Java多線程實現(xiàn)方式有兩種,第一種是繼承Thread類,第二種是實現(xiàn)Runnable接口,兩種有很多差異,下面跟著本文一起學(xué)習(xí)吧,希望能給你帶來幫助
    2021-07-07
  • Spring AOP如何自定義注解實現(xiàn)審計或日志記錄(完整代碼)

    Spring AOP如何自定義注解實現(xiàn)審計或日志記錄(完整代碼)

    這篇文章主要介紹了Spring AOP如何自定義注解實現(xiàn)審計或日志記錄(完整代碼),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • JAVA中堆、棧,靜態(tài)方法和非靜態(tài)方法的速度問題

    JAVA中堆、棧,靜態(tài)方法和非靜態(tài)方法的速度問題

    這篇文章主要介紹了JAVA中堆、棧,靜態(tài)方法和非靜態(tài)方法的速度問題,堆和棧得速度性能分析多角度給大家分析,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-08-08
  • Kafka是什么及如何使用SpringBoot對接Kafka(最新推薦)

    Kafka是什么及如何使用SpringBoot對接Kafka(最新推薦)

    這篇文章主要介紹了Kafka是什么,以及如何使用SpringBoot對接Kafka,今天我們通過一個Demo講解了在SpringBoot中如何對接Kafka,也介紹了下關(guān)鍵類?KafkaTemplate,需要的朋友可以參考下
    2023-11-11
  • java集合Collection常用方法解讀

    java集合Collection常用方法解讀

    這篇文章主要介紹了java集合Collection常用方法解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • java string類的常用方法詳細(xì)介紹

    java string類的常用方法詳細(xì)介紹

    在開發(fā)過程中經(jīng)常會使用到j(luò)ava string類的方法,本文將以此問題進行詳細(xì)介紹
    2012-11-11
  • jvm運行原理以及類加載器實例詳解

    jvm運行原理以及類加載器實例詳解

    這篇文章主要給大家介紹了關(guān)于jvm運行原理以及類加載器的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • java中struts2實現(xiàn)文件上傳下載功能實例解析

    java中struts2實現(xiàn)文件上傳下載功能實例解析

    這篇文章主要介紹了java中struts2實現(xiàn)文件上傳下載功能的方法,以實例形式較為詳細(xì)的分析了struts2實現(xiàn)文件上傳下載功能的具體實現(xiàn)技巧與相關(guān)問題的解決方法,具有一定的參考借鑒價值,需要的朋友可以參考下
    2015-01-01

最新評論