• [Java] 資料輸入的差異性(System.in、BufferedReader、Scanner)


    一、System.in

    System.in提供的read方法每次只能讀取一個字節的數據,不實用

    二、BufferedReader

    BufferedReader類位於java.io包中,使用要加上 import java.io.BufferedReader。 

    使用BufferedReader來取得輸入的方法是固定的,每次使用前先如法炮製就可以 

    BufferedReader buffer = new BufferedReader(new InputStreamReader(System.in)); 
    String text = buffer .readLine();

    readLine()方法會返回用戶在按下Enter鍵之前的所有字符輸入,但不包括最後按下的Enter返回字符。

    註:使用BufferedReader對象的readLine()方法必須處理 java.io.IOException異常(Exception) 

    三、Scanner

    在Java SE 6中,新增Scanner類,用以取得用戶的輸入,Scanner類位於java.util包中,需要加上import java.util.Scanner ,告訴編譯器你將使用j ava.util 包中的Scanner類。

    創建Scanner類的對象時,需要用System.in作為它的參數,System.in取得用戶輸入的內容後,交給Scanner來作處理。

    Scanner類中提供了多個方法:        

    next():是以空白或換行為區格,取得一個字符串      

    nextLine()則是以換行為區格讀取整行字符串

    Scanner cin = new Scanner(System.in);     //輸入   1234 Enter(
    )
    String str = cin.next();                  //抓取   1234            剩下
    
    String str2 = cin.nextLine();             //抓取   
    

    next()是抓取空白或 換行字元以前的字串,所以next()抓完字串之後 就被nextLine()抓住了

    解決方法就是不斷讓nextLine()重複抓取,即可抓到完整字串 ( 含 ! )

    Scanner cin = new Scanner(System.in);        //輸入   1234 Enter(
    )
    String str = cin.next();                     //抓取   1234            剩下
    
    while( (str2 = cin.nextLine()).equals("") ); //抓到
    ,判斷為"",於是再跑一次,抓取1234 Enter(
    )

    nextInt():將取得的字符串轉換成int類型的整數;        

    nextFloat():將取得的字符串轉換成float型;        

    nextBoolean():將取得的字符串轉換成boolean型; 

    ...等

    用Scanner獲得用戶的輸入非常的方便,但是Scanner取得輸入 (nextLine()除外) 的主要依據是空格符 (包括空格鍵、Tab鍵和Enter鍵) 當按下這其中的任一鍵時,Scanner就會返回下一個輸入,所以當輸入的內容中間包括空格時,應該考慮使用BufferedReader取得完整的輸入。

    文章最後來討論效能面

    1. BufferedReader 是先把數據讀到緩存區,然後在寫到硬盤裡

    2. Scanner是直接往硬盤寫數據

    效率的比較 BufferedReader > Scanner

  • 相关阅读:
    .Net Core 5.x Api开发笔记 -- 消息队列RabbitMQ实现事件总线EventBus(二)
    .Net Core 5.x Api开发笔记 -- 消息队列RabbitMQ实现事件总线EventBus(一)
    SQL 入门教程:创建视图
    微信小程序-企业微信PC端,对接echarts图无法显示
    SQL查看表结构以及表说明
    Skoruba.IdentityServer4.STS.Identity 踩坑
    Docker部署文档
    eCharts图形在IE11中不能渲染
    Cookie中文乱码问题
    Blazor Webassembly多标签页实现
  • 原文地址:https://www.cnblogs.com/pyleu1028/p/10310686.html
Copyright © 2020-2023  润新知