博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Java] 資料輸入的差異性(System.in、BufferedReader、Scanner)
阅读量:5114 次
发布时间:2019-06-13

本文共 1588 字,大约阅读时间需要 5 分钟。

 

一、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            剩下\nString 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            剩下\nwhile( (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

 

转载于:https://www.cnblogs.com/pyleu1028/p/10310686.html

你可能感兴趣的文章
jvm参数
查看>>
我对前端MVC的理解
查看>>
Silverlight实用窍门系列:19.Silverlight调用webservice上传多个文件【附带源码实例】...
查看>>
2016.3.31考试心得
查看>>
mmap和MappedByteBuffer
查看>>
Linux的基本操作
查看>>
转-求解最大连续子数组的算法
查看>>
对数器的使用
查看>>
【ASP.NET】演绎GridView基本操作事件
查看>>
ubuntu无法解析主机错误与解决的方法
查看>>
尚学堂Java面试题整理
查看>>
MySQL表的四种分区类型
查看>>
[BZOJ 3489] A simple rmq problem 【可持久化树套树】
查看>>
STM32单片机使用注意事项
查看>>
swing入门教程
查看>>
好莱坞十大导演排名及其代表作,你看过多少?
查看>>
Loj #139
查看>>
hihocoder1187 Divisors
查看>>
Azure 托管镜像和非托管镜像对比
查看>>
js window.open 参数设置
查看>>