運(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}+