PAT乙級(jí)1081看BufferedReader和Scanner

Java的輸入輸出

Java通過Scanner和BufferedReader可以實(shí)現(xiàn)對(duì)字符串型數(shù)據(jù)的輸入
實(shí)現(xiàn)思路:利用正則表達(dá)式驗(yàn)證其密碼的類型匹配腌且,然后逐個(gè)分析字符梗肝,進(jìn)行判斷。
本文主要是研究java中BufferedReader和Scanner兩種函數(shù)的效率

先奉上1081的解答源代碼

Scanner實(shí)現(xiàn)

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Patest_1081 {
    public static void main(String[] args){
        Scanner reader=new Scanner(System.in);
        int n=reader.nextInt();
        String str;
        String pwVerify="^([0-9]|[A-Z]|[a-z]|[.]){6,80}";
        Pattern pwPattern=Pattern.compile(pwVerify);
        reader.nextLine();
        for(int i=0;i<n;++i){
            str=reader.nextLine();
            if(str.length()<6){
                System.out.println("Your password is tai duan le.");
                continue;
            }
            Matcher pwMatch=pwPattern.matcher(str);
            if(!pwMatch.matches()){
                System.out.println("Your password is tai luan le.");
                continue;
            }
            int countNum=0,countChar=0;
            for(int k=0;k<str.length();++k){
                if(str.charAt(k)>='0'&&str.charAt(k)<='9')countNum++;
                if((str.charAt(k)>='a'&&str.charAt(k)<='z')||(str.charAt(k)>='A'&&str.charAt(k)<='Z'))countChar++;
                if(countChar>0&&countNum>0){
                    System.out.println("Your password is wan mei.");
                    break;
                }
            }
            if(countChar==0)System.out.println("Your password needs zi mu.");
            if(countNum==0)System.out.println("Your password needs shu zi.");
        }
    }
}

PAT中Scanner實(shí)現(xiàn)的結(jié)果

圖片.png

BufferedReader實(shí)現(xiàn)

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Patest_1081_2 {
    public static void main(String[] args)throws IOException {
        BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));
        int n=Integer.parseInt(buf.readLine());
        String str;
        String pwVerify="^([0-9]|[A-Z]|[a-z]|[.]){6,80}";
        Pattern pwPattern=Pattern.compile(pwVerify);
        for(int i=0;i<n;++i){
            str=buf.readLine();
            if(str.length()<6){
                System.out.println("Your password is tai duan le.");
                continue;
            }
            Matcher pwMatch=pwPattern.matcher(str);
            if(!pwMatch.matches()){
                System.out.println("Your password is tai luan le.");
                continue;
            }
            int countNum=0,countChar=0;
            for(int k=0;k<str.length();++k){
                if(str.charAt(k)>='0'&&str.charAt(k)<='9')countNum++;
                if((str.charAt(k)>='a'&&str.charAt(k)<='z')||(str.charAt(k)>='A'&&str.charAt(k)<='Z'))countChar++;
                if(countChar>0&&countNum>0){
                    System.out.println("Your password is wan mei.");
                    break;
                }
            }
            if(countChar==0)System.out.println("Your password needs zi mu.");
            if(countNum==0)System.out.println("Your password needs shu zi.");
        }
    }
}

PAT中BufferedReader實(shí)現(xiàn)的結(jié)果

圖片.png

??然后通過對(duì)比我們可以清楚的看到僅僅5組數(shù)據(jù)铺董,BufferedReader就已經(jīng)比Scanner展示出了更高的效率巫击。在諸如ACM等等算法的比賽當(dāng)中,對(duì)于運(yùn)行時(shí)間的要求極其苛刻精续,Java并沒有展示出對(duì)比C++/C語言的效率坝锰。但是,類似PAT給予了Java更寬松的時(shí)間規(guī)則重付,因此顷级,Java在一定程度上有比C++/C的一些優(yōu)勢(shì)。因此确垫,我們對(duì)Java中數(shù)據(jù)讀取的Scanner和BufferedReader進(jìn)行分析愕把。
??但是在多次提交中發(fā)現(xiàn),在PAT中由于計(jì)時(shí)規(guī)則的緣故森爽,導(dǎo)致每次提交的運(yùn)行時(shí)間都各不相同恨豁,因此決定利用編譯器對(duì)于其效率進(jìn)行一定的測(cè)試。因此我決定編寫簡(jiǎn)單的程序?qū)τ贘ava中Scanner和BufferedReader的效率做深度的測(cè)試爬迟。

首先我們利用Math.random()函數(shù)生成10000個(gè)隨機(jī)數(shù)當(dāng)做字符串

public class BufferedReader_vs_Scanner {
    public static void main(String[] args)throws IOException {
        
        for(int i=0;i<10000;++i){
            System.out.println(Math.random()*1000);
        }
    }
}

然后將生成的結(jié)果放入一個(gè)word文檔中待用

圖片.png

如圖中所示橘蜜,我們已經(jīng)生成了10000個(gè)隨機(jī)數(shù)

然后編寫一個(gè)簡(jiǎn)單的讀取的BufferedReader和Scanner的程序

圖片.png

對(duì)比發(fā)現(xiàn)BufferedReader相對(duì)Scanner在字符串方面略微有優(yōu)勢(shì)

如果讀取數(shù)字等,由于Scanner的函數(shù)強(qiáng)大,可能速度會(huì)快于還需要轉(zhuǎn)換的BufferedReader计福。而如果輸入量巨大跌捆,可能BufferedReader要比Scanner更有優(yōu)勢(shì)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末象颖,一起剝皮案震驚了整個(gè)濱河市佩厚,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌说订,老刑警劉巖抄瓦,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異陶冷,居然都是意外死亡钙姊,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門埂伦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來煞额,“玉大人,你說我怎么就攤上這事沾谜〔不伲” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵基跑,是天一觀的道長(zhǎng)婚温。 經(jīng)常有香客問我,道長(zhǎng)涩僻,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任栈顷,我火速辦了婚禮逆日,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘萄凤。我一直安慰自己室抽,他們只是感情好饭庞,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開白布炫贤。 她就那樣靜靜地躺著疆栏,像睡著了一般趁怔。 火紅的嫁衣襯著肌膚如雪骨稿。 梳的紋絲不亂的頭發(fā)上佃却,一...
    開封第一講書人閱讀 51,554評(píng)論 1 305
  • 那天搀突,我揣著相機(jī)與錄音乏屯,去河邊找鬼漾月。 笑死病梢,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蜓陌,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼觅彰,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了钮热?” 一聲冷哼從身側(cè)響起填抬,我...
    開封第一講書人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎隧期,沒想到半個(gè)月后飒责,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡厌秒,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年读拆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鸵闪。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡檐晕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蚌讼,到底是詐尸還是另有隱情辟灰,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布篡石,位于F島的核電站芥喇,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏凰萨。R本人自食惡果不足惜继控,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望胖眷。 院中可真熱鬧武通,春花似錦、人聲如沸珊搀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽境析。三九已至囚枪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間劳淆,已是汗流浹背链沼。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留沛鸵,地道東北人忆植。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親朝刊。 傳聞我的和親對(duì)象是個(gè)殘疾皇子耀里,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容