1. Java命令行参数:
1) 即main方法的参数String[] args;
2) 这里就只声明三点:
1) 命令行参数是从程序名称之后开始算的:java JavaApplication arg1 arg2 arg3 ...
2) args[0]是第一个参数arg1,而并非程序名JavaApplication;
3) 命令行参数是用空格作为分隔符的,如果参数本身是包含空格的,则该参数应该用双引号""引起来,避免其中的空格被当做参数分隔符!!
2. Scanner:
1) 是一种基于正则表达式的文本扫描器,可以扫描文本中的字符串(模式)、数字等;
2) 它是一种高级处理流,可以包装文件、键盘输入流、字符串等,对这些节点中的文本流数据进行解析;
3) 构造器:
i. 通用版本:Scanner(InputStream | File | Path source[, Charset cs]);
ii. 分别重载了InputStream(键盘输入流就用这种)、File、Path,并且可以选择性指定字符集(毕竟像文件这种使用的字符集可以多种多样,容易产生乱码问题);
iii. 还有一个String版本的:Scanner(String source); // String就没有字符集这个选项,因为String肯定是Java程序内的数据,Java程序范围之内肯定都是Java自己的Unicode编码,因此没有Charset这个参数重载版本;
4) 解析普通字符串:
i. 解析的时候默认使用空白符(空格、制表、换行)作为字符串的分隔符(如果输入的是"abc def",那么也会被分成两个字符串"abc和def"!!一定要注意了;
ii. 解析方法:
a. boolean hasNext(); // 是否有下一个字符串,基于分隔符的
b. String next(); // 获取下一个字符串并移动位置指针
!!所有的解析方法肯定都是先用hasNext判断是否能继续读取,然后再调用next读取下一个;
5) 自定义分隔符:
i. Scanner默认使用空白符分隔字符串,但是可以自定义这个分隔符;
ii. Scanner useDelimiter(String pattern); // 用一个正则表达式来作为分隔符
iii. 简单的例子比如:scan.useDelimiter("\n"); 就是只以换行符作为分隔符,那么hasNext和next读取的单位就是行了而不是普通字符串了;
6) 当然Scanner为了方便也提供了正行读取的解析法:
i. boolean hasNextLine(); // 是否有下一行
ii. String nextLine(); // 直接读取下一行
!!Scanner的所有读取都会抛弃分隔符,也就是说上面的方法读取之后都不包含空白符、换行符;
7) 解析数字:
i. boolean hasNextType(); // 是否有下一个type类型的数据
ii. type nextType(); // 读取下一个type类型的字符串并解析成type类型返回
!!这里type支持Java的所有基础类型(int、double、long等);
8) 使用:肯定是用一个while循环判断是否有下一个可读取的内容(hasNext),然后在循环体中循环调用next读取内容
while (scn.hasNext()) {
type val = next();
处理代码...
}