[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(\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)的更多相关文章
- 使用WebClient與HttpWebRequest的差異
在<Windows Phone 7-下載檔案至Isolated Storage>提到了透過WebClient的功能將網站上的檔案下載至 WP7的Isoated Storage之中.但實際的 ...
- [Xamarin] 關於Internal Storage ,存取App內部使用資料 (转帖)
最近在開發App,會使用到必須要處理一些App所使用的資料,上網路查一下Android 得作法,包含我自己也實作了一下,可能是因為對Java || Android 不是很孰悉,常常錯在 java.la ...
- [MVC4-基礎] 從資料庫取值顯示在DropDownList中
剛開始學MVC4,以下是一些基礎的學習筆記! 完成效果像下面這樣,資料來源是既有的Database. 1.Controller public ActionResult Index() { SqlCon ...
- [Xamarin] 透過 IsolatedStorageFile儲存資料(转帖)
開發手機App通常都會遇到想要儲存資料的,舉個例來說,像是 (圖片來源:http://docs.xamarin.com/guides/android/application_fundamentals/ ...
- Delphi APP 開發入門(八)SQLite資料庫
Delphi APP 開發入門(八)SQLite資料庫 分享: Share on facebookShare on twitterShare on google_plusone_share 閲讀次 ...
- [Java] 基本資料包裝類別 Wrapper Classes
基本型別包裝 (Wrapper Classes) 將基本型別生成物件,要將基本型別先包裝成物件,才能執行生成, Boxing: Integer a = new Integer(1) Unboxing: ...
- Active Record: 資料庫遷移(Migration) (转)
Active Record: 資料庫遷移(Migration) Programming today is a race between software engineers striving to b ...
- jQuery - 中文輸入法與KeyDown/KeyPress事件
最近專案中引用了Telerik ASP.NET擴充元件AutoComplete輸入欄位,測試時發現偶爾會不聽始喚,輸入文字時無法觸發資料查詢,在Javascript Source Code裡反覆追蹤測 ...
- ASP.NET MVC5写.php路由匹配时的问题 ASP.NET MVC 4 在 .NET 4.0 与.NET 4.5 的專案範本差異
由于外包公司结束合作,所以考虑把其APP服务替换过来,因原后台是用php写的,在不影响员客户端使用的情况下在MVC下重写路由配置实现处理原php链接地址的请求,但实现时发现怎么也匹配不到自己写的路由, ...
随机推荐
- 初学者易上手的SSH-struts2 03数据封装
这一章我们一样来获取数据,看看与上一章有什么不同吧.数据封装也有三种方式.下面我们来一一介绍. 第一种:属性封装. 类就用LoginAction吧.里面有两属性,name,pwd.给这两个属性写上ge ...
- Pandas 基础(8) - 用 concat 组合 dataframe
以各个城市的天气为例, 先准备下面的数据: 印度天气的相关信息: import pandas as pd india_weather = pd.DataFrame({ 'city': ['mumbai ...
- [原][译][jsbsim]空气动力学模型库讨论JSBSim对比YASim
英文原文:JSBSim_vs_YASim 准确性和现实性飞行动力学模型的准确性和真实性是针对YASim的争论中提出的两个共同点.实际上,如果你给YASim或JSBSim垃圾参数,它们都将返回垃圾空气动 ...
- Fabric 1.0交易流程
这篇文章详细介绍fabric的交易流程,以图片加文字的形式呈现. Fabric 1.0交易流程 fabric中的所有交易都是通过chaincode执行 1.应用程序客户端通过SDK调用证书服务(CA) ...
- POJ-3294 Life Forms n个字符串中出现超过n/2次的最长子串(按字典序依次输出)
按照以前两个字符串找两者的最长公共子串的思路类似,可以把所有串拼接到一起,这里为了避免讨论LCP跨越多个串需需要特别处理的问题用不同的字符把所有串隔开(因为char只有128位,和可能不够用,更推荐设 ...
- 基础模块 网络连接检查 js
//无对象则加载 if (typeof Base == "undefined") Base = function() {} // 获取时间对象的基本方法 Base.prototyp ...
- 单点登录系统实现基于SpringBoot
今天的干货有点湿,里面夹杂着我的泪水.可能也只有代码才能让我暂时的平静.通过本章内容你将学到单点登录系统和传统登录系统的区别,单点登录系统设计思路,Spring4 Java配置方式整合HttpClie ...
- Samba服务与Nginx服务
Samba服务: 1 准备环境 =====>part1: iptables -F 清楚防火墙配置 #systemctl disable firewalld #开机默认关闭 #systemctl ...
- 告诉你们!我是怎么与Linux系统接触的!
最开始接触Linux是在15年来北京后,刚来北京机缘巧合,从事了实施工程师的工作.实施工作是一个面很广的工作.业务.技术.沟通等等方方面面的.技术一直是我是的短板.刚开始,公司在要在阿里云上部署APP ...
- 调试lldb命令常用
0.关于iOS的UI显示调试的三方控件 Reveal “po”命令是“print object”(打印对象)的简写.“$eax”是cup的一个寄存器.在一个异常的情况下,这个寄存器将会包含一个异常对象 ...