一、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. node:express:error---填坑之路

    express版本4.0之后需要安装的东西 npm install -g express npm install -g express-generator jade转换成ejs(修改为html引擎,打 ...

  2. CSS之user-select——设置标签中的文字是否可被复制

    详细介绍请参考 http://www.css88.com/book/css/properties/user-interface/user-select.htm CSS样式 user-select:no ...

  3. maven+springmvc出现:java.sql.SQLException: Unknown system variable 'query_cache_size'

    连接mysql时一直出现以下的错误: org.springframework.web.util.NestedServletException: Request processing failed; n ...

  4. 2016 Russian Code Cup (RCC 16), Final Round B - Cactusophobia

    B - Cactusophobia 思路: 点双联通分量+最大流 用tarjan求出每个点双联通分量 对于大小大于1的点双联通分量,它就是个环,那么源点和这个环相连, 容量为环的大小减一,这个环和环上 ...

  5. Unity---判断某个点是否在摄像机的视景范围内

    using UnityEngine; [RequireComponent(typeof(Camera))] public class VisualDetectionCamera : MonoBehav ...

  6. TensorFlow 官方文档中文版 --技术文档

    1.文档预览 2.文档下载 TensorFlow官方文档中文版-v1.2.pdf 提取码:pt7p

  7. 每天跟着书敲Mysql

    要深入学下Mysql操作啦 CRUD,create,retrieve,update,delete

  8. dedecmsv5.7 前台模版里输出变量

    如何在PHP文件查询出来的数据赋值给前端页面展示出来? 例如: PHP文件:agency.php require_once(dirname(__FILE__) . '/../../include/co ...

  9. 从Excel、CSV文件获取数据

    #region 从Excel获取数据 /// <summary> /// 从Excel获取数据 /// </summary> /// <param name=" ...

  10. python avro 数据格式使用demo

    {"name": "UEProcedures", "type": "record", "fields" ...