一、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(\n)
String str = cin.next(); //抓取 1234 剩下\n
String str2 = cin.nextLine(); //抓取 \n

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

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

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

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

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

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

...等

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

文章最後來討論效能面

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

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

效率的比較 BufferedReader > Scanner

[Java] 資料輸入的差異性(System.in、BufferedReader、Scanner)的更多相关文章

  1. 使用WebClient與HttpWebRequest的差異

    在<Windows Phone 7-下載檔案至Isolated Storage>提到了透過WebClient的功能將網站上的檔案下載至 WP7的Isoated Storage之中.但實際的 ...

  2. [Xamarin] 關於Internal Storage ,存取App內部使用資料 (转帖)

    最近在開發App,會使用到必須要處理一些App所使用的資料,上網路查一下Android 得作法,包含我自己也實作了一下,可能是因為對Java || Android 不是很孰悉,常常錯在 java.la ...

  3. [MVC4-基礎] 從資料庫取值顯示在DropDownList中

    剛開始學MVC4,以下是一些基礎的學習筆記! 完成效果像下面這樣,資料來源是既有的Database. 1.Controller public ActionResult Index() { SqlCon ...

  4. [Xamarin] 透過 IsolatedStorageFile儲存資料(转帖)

    開發手機App通常都會遇到想要儲存資料的,舉個例來說,像是 (圖片來源:http://docs.xamarin.com/guides/android/application_fundamentals/ ...

  5. Delphi APP 開發入門(八)SQLite資料庫

    Delphi APP 開發入門(八)SQLite資料庫 分享: Share on facebookShare on twitterShare on google_plusone_share   閲讀次 ...

  6. [Java] 基本資料包裝類別 Wrapper Classes

    基本型別包裝 (Wrapper Classes) 將基本型別生成物件,要將基本型別先包裝成物件,才能執行生成, Boxing: Integer a = new Integer(1) Unboxing: ...

  7. Active Record: 資料庫遷移(Migration) (转)

    Active Record: 資料庫遷移(Migration) Programming today is a race between software engineers striving to b ...

  8. jQuery - 中文輸入法與KeyDown/KeyPress事件

    最近專案中引用了Telerik ASP.NET擴充元件AutoComplete輸入欄位,測試時發現偶爾會不聽始喚,輸入文字時無法觸發資料查詢,在Javascript Source Code裡反覆追蹤測 ...

  9. ASP.NET MVC5写.php路由匹配时的问题 ASP.NET MVC 4 在 .NET 4.0 与.NET 4.5 的專案範本差異

    由于外包公司结束合作,所以考虑把其APP服务替换过来,因原后台是用php写的,在不影响员客户端使用的情况下在MVC下重写路由配置实现处理原php链接地址的请求,但实现时发现怎么也匹配不到自己写的路由, ...

随机推荐

  1. POJ2955--Brackets 区间DP入门 括号匹配

    题意很简单,就是求给出串中最大的括号匹配数目.基础题,格式基本为简单区间dp模板. #include<iostream> #include<string.h> using na ...

  2. 解决 ln -s 软链接产生的Too many levels of symbolic links错误

    参考: ln -s 软链接产生Too many levels of symbolic links错误 解决 ln -s 软链接产生的Too many levels of symbolic links错 ...

  3. 调研IOS的开发环境的发展演变

    一. 关于IOS的开发发展历史: 百度一下,关于这方面的详细资料有很多,在这里就不复制粘贴占用篇幅了. 二. 关于个人搭建IOS开发环境的体验: 本人用的是华硕电脑,window7的操作系统,本来为了 ...

  4. 无头浏览器phantomJS

    selenium: 有头浏览器的代表(selenium+python也可实现静默运行 引入python的一个包,包叫:虚拟屏幕pyvirtualdisplay) PhantomJS : 无头浏览器的代 ...

  5. 20190318wdVBA_替换下划线

    Sub 替换下划线() Selection.HomeKey wdStory Selection.Find.ClearFormatting Selection.Find.Font.Underline = ...

  6. 获取url "?" 后面的字符串

    今天写了一个URL “?” 后面的字符串 来改变当前页面的状态 首先需要获取当前页面的URL console.log(widow.location) 之后页面就会打印出来当前的URL 之后我们获取UR ...

  7. Flask实现异步非阻塞请求功能

    pip install gevent 关于gevent Gevent 是一个 Python 并发网络库,它使用了基于 libevent 事件循环的 greenlet 来提供一个高级同步 API.下面是 ...

  8. emacs初步学习

    一.安装扩展 安装web-mode.el扩展,本来试试打算试试格式化freemarker,另外一篇吐槽了freemarker,不用了. 这个emacs也花了点时间,稍微整理一下. 1.确定.emacs ...

  9. JS的防抖和节流

    数个月之前,在一次前端的性能优化中,接触到了JS中防抖和节流,一开始还不明白他们的应用在哪里,可后来才知道,这是前端中最基础的性能优化,在绑定 scroll .resize 这类事件时,当它发生时,它 ...

  10. linux c++ curl https 请求并双向验证SSL证书

    1.配置curl https请求需要提供 CA证书.客户端证书和客户端秘钥,这三个文件的pem格式. 分别对应 curl_easy_setopt() 函数的 下面三个参数: CURLOPT_CAINF ...