Java 基礎(chǔ)類庫(kù)之-與用戶互動(dòng)

運(yùn)行 java程序的參數(shù)

我們知道無(wú)論任何一個(gè) java 程序想要得到執(zhí)行,那么必須以某個(gè)類的主函數(shù)為入口,例如:

public class ArgsTest{
    public static void main(String[] args){
        System.out.println("args 數(shù)組的長(zhǎng)度是"+args.length);
        for(String arg : args){
            System.out.println(arg);
        }
    }
}           

JVM是怎么處理 args數(shù)組參數(shù)的?

通過(guò)上面的答應(yīng)結(jié)果可以看出 args 是一個(gè)長(zhǎng)度為0的數(shù)組,因?yàn)橛?jì)算機(jī)是沒(méi)有思考能力的,既然用戶沒(méi)有賦值給args[]數(shù)組辉哥,那么 JVM 也不知道如何 args 數(shù)組賦值,所以 JVM 將 args數(shù)組設(shè)置成一個(gè)長(zhǎng)度為0的數(shù)組.因此默認(rèn) args[]數(shù)組的長(zhǎng)度為0

如果向 args數(shù)組添加元素

在運(yùn)行 一個(gè)java程序的時(shí)候,我們?cè)诮K端運(yùn)行 java ClassName arguments的時(shí)候醋旦,arguments 就會(huì)被 JVM 自動(dòng)賦值到 args 數(shù)組中,當(dāng)需要想 args[]數(shù)組中賦多個(gè)值得時(shí)候恒水,需要將 arguments 用空格分開(kāi),JVM 默認(rèn)使用空格符作為分隔符. 所以如果參數(shù)本身含有空格的時(shí)候饲齐,需要使用雙引號(hào)""括起來(lái)钉凌,例如:
java ArgsTest "java Spring" ,那么程序的輸出結(jié)果是 :

java Spring

如果運(yùn)行 java ArgsTest java Spring ,那么輸出結(jié)果為:

java
Spring

程序的輸出長(zhǎng)度也分別是1和2

使用 Scanner 獲取鍵盤(pán)輸入

運(yùn)行 java 程序傳入的參數(shù)只能在程序開(kāi)始之前就設(shè)定幾個(gè)固定的參數(shù).如果我們想要在程序運(yùn)行時(shí)取得輸入,那么就需要使用 Scanner 類捂人,我們可以很方便的獲取鍵盤(pán)輸入御雕,Scanner 類有多個(gè)構(gòu)造器,不同的構(gòu)造器可以接受文件滥搭,輸入流酸纲,字符串作為數(shù)據(jù)源,用于從 字符串瑟匆,文件闽坡,輸入流中解析數(shù)據(jù).Scanner 是一個(gè)基于正則表達(dá)式的文本掃描器,它可以從文件愁溜,輸入流和字符串中解析出基本的數(shù)據(jù)類型和字符串值.

構(gòu)造方法

  • Scanner(File cource) 構(gòu)造一個(gè)新的 Scanner疾嗅,它生成的值是從指定的文件掃描的

  • Scanner(InputStream source)構(gòu)造一個(gè)新的 Scanner,它生成的值是從一個(gè)指定的輸入流中掃描的

  • Scanner (Readable source) 構(gòu)造一個(gè)新的 Scanner 冕象,它生成的值是從一個(gè)指定的源中掃描的

  • Scanner(ReadableByteChannel source) 構(gòu)造一個(gè)新的 Scanner 宪迟,它生成的值是從一個(gè)指定的信道掃描的

  • Scanner(String source)構(gòu)造一個(gè)新的 Scanner,它的值是從一個(gè)指定的字符串掃描的

主要方法

  • void close() 關(guān)閉此掃描器
  • Pattern delimiter()返回此 Scanner 當(dāng)前正在用于匹配分隔符的 Pattern
  • String findInLine(Pattern pattern) 試圖在忽略分隔符的情況下查找一個(gè)指定的模式 pattern
  • int radix() 返回此掃描器默認(rèn)基數(shù)
  • skip(Pattern pattern) 在忽略分隔符的情況下跳過(guò)與制定模式匹配的輸入信息
  • reset() 重置此掃描器交惯,分隔符也會(huì)重置
  • locale()返回當(dāng)前的語(yǔ)言環(huán)境
  • useDelimiter(Pattern pattern) 將此掃描器的分割模式設(shè)置為此指定模式
  • Scanner useLocale(Locale locale) 將此掃描器的語(yǔ)言環(huán)境設(shè)置為指定的語(yǔ)言環(huán)境
  • Scanner userRadix(int radix)將此掃描器的默認(rèn)基數(shù)設(shè)置為指定基數(shù)

在使用 Scanner 的時(shí)候,我們最經(jīng)常實(shí)用的還有以下兩個(gè)方法 hasNextType() Type指的是我們指定的類型(一般是基本數(shù)據(jù)類型)穿仪,例如hasNext() ,hasNextByte(),hasNextLine()等席爽,讀取一個(gè)文件的時(shí)候可以使用 hasNextLine() 方法,如果沒(méi)有制定啊片,則該方法為 hasNext()方法只锻,如果掃描器中存在我們指定的結(jié)果,那么返回值為 true.還有一個(gè) nextType()紫谷,通過(guò)該方法齐饮,我們能夠獲取到輸入的值,如果不指定 Type笤昨,那么 next()方法返回的值為 String

Scanner為了等待信息的輸入祖驱,它的讀取操作可能被阻塞.如果輸入源沒(méi)有輸入結(jié)束,Scanner 又讀不到更多的輸入項(xiàng)時(shí)瞒窒,Scanner 的 hasNext()和 next()方法都有可能阻塞.
String testStr = "1 2 3 4 5 6 \n 7 8 9";
Scanner scanner = new Scanner(testStr);
System.out.println("scanner 的默認(rèn)分隔符:"+scanner.delimiter());
System.out.println("scanner 的默認(rèn) locale :"+scanner.locale());
System.out.println("scanner 的默認(rèn) 基數(shù) :"+scanner.radix());

    System.out.println("輸出掃描器的值:");
    while (scanner.hasNext()) {
        System.out.println(""+scanner.next());
    }

scanner 的默認(rèn)分隔符:\p{javaWhitespace}+
scanner 的默認(rèn) locale :zh_CN
scanner 的默認(rèn) 基數(shù) :10
輸出掃描器的值:
1
2
3

4
5
6
7
8
9

scanner = new Scanner(testStr);
    scanner.useDelimiter("\\n");
    System.out.println("scanner 的默認(rèn)分隔符:"+scanner.delimiter());
    System.out.println("輸出使用分隔符后掃描器的值:");
    while (scanner.hasNext()) {
        System.out.println(""+scanner.next());
    }

scanner 的默認(rèn)分隔符:\n
輸出使用分隔符后掃描器的值:
1 2 3 4 5 6
7 8 9

//      忽略分隔符捺僻,使用指定模式
    scanner = new Scanner(testStr);
    scanner.useDelimiter("7");
    System.out.println("scanner 的默認(rèn)分隔符:"+scanner.delimiter());
    System.out.println("輸出忽略分隔符:");
    while (scanner.hasNext()) {
//匹配到結(jié)果以后,將當(dāng)前的結(jié)果使用指定的模式進(jìn)行匹配
// 但第一次匹配結(jié)果的時(shí)候,匹配結(jié)果為 1 2 3 4 5 6 \n ,使用 findLine(pattern)以后匕坯,將會(huì)按照 pattern 進(jìn)行匹配束昵,pattern 前的將被丟棄,后的就是 scanner.next()的結(jié)果
        System.out.println("-----"+scanner.findInLine("2"));
        System.out.println(""+scanner.next());

    }
    scanner.reset();
    System.out.println("scanner 重置后 的默認(rèn)分隔符:"+scanner.delimiter());

scanner 的默認(rèn)分隔符:7
輸出忽略分隔符:
-----2
3 4 5 6
-----null
8 9
scanner 重置后 的默認(rèn)分隔符:\p{javaWhitespace}+

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末葛峻,一起剝皮案震驚了整個(gè)濱河市锹雏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌术奖,老刑警劉巖礁遵,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異腰耙,居然都是意外死亡榛丢,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)挺庞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)晰赞,“玉大人,你說(shuō)我怎么就攤上這事选侨∫从悖” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵援制,是天一觀的道長(zhǎng)戏挡。 經(jīng)常有香客問(wèn)我,道長(zhǎng)晨仑,這世上最難降的妖魔是什么褐墅? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮洪己,結(jié)果婚禮上妥凳,老公的妹妹穿的比我還像新娘。我一直安慰自己答捕,他們只是感情好逝钥,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著拱镐,像睡著了一般艘款。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上沃琅,一...
    開(kāi)封第一講書(shū)人閱讀 48,970評(píng)論 1 284
  • 那天哗咆,我揣著相機(jī)與錄音,去河邊找鬼阵难。 笑死岳枷,一個(gè)胖子當(dāng)著我的面吹牛辙谜,可吹牛的內(nèi)容都是我干的跺株。 我是一名探鬼主播侦香,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼圾叼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了盛泡?” 一聲冷哼從身側(cè)響起闷祥,我...
    開(kāi)封第一講書(shū)人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎傲诵,沒(méi)想到半個(gè)月后凯砍,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拴竹,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年悟衩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片栓拜。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡座泳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出幕与,到底是詐尸還是另有隱情挑势,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布啦鸣,位于F島的核電站潮饱,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏诫给。R本人自食惡果不足惜香拉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望中狂。 院中可真熱鬧缕溉,春花似錦、人聲如沸吃型。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)勤晚。三九已至,卻和暖如春泉褐,著一層夾襖步出監(jiān)牢的瞬間赐写,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工膜赃, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留挺邀,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像端铛,于是被迫代替她去往敵國(guó)和親泣矛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

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

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理禾蚕,服務(wù)發(fā)現(xiàn)您朽,斷路器,智...
    卡卡羅2017閱讀 134,599評(píng)論 18 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法换淆,類相關(guān)的語(yǔ)法哗总,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法倍试,異常的語(yǔ)法讯屈,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,581評(píng)論 18 399
  • Java 語(yǔ)言支持的類型分為兩類:基本類型和引用類型。整型(byte 1, short 2, int 4, lon...
    xiaogmail閱讀 1,344評(píng)論 0 10
  • 說(shuō)起我是怎么學(xué)習(xí)寫(xiě)作的县习,那是很久遠(yuǎn)的事了涮母,但我依然清晰的記得,在這里我不妨告訴大家准颓,希望對(duì)大家有所幫助哈蝇,有所裨益。...
    人生如夢(mèng)z閱讀 776評(píng)論 0 5
  • 女孩子要多為自己的下一代著想攘已。 我讀書(shū)炮赦,是希望將來(lái)不上當(dāng)。 這個(gè)世界太多污濁样勃, 我不希望將來(lái)自己做母親時(shí) 除了打工...
    用余生追趕時(shí)光閱讀 325評(píng)論 0 3