Scanner类
介绍
这是一个用于抓取输入的类,可以从控制台抓取输入,也可以从文件抓取输入,
这个类有点像Stream,一旦使用了Next()系列函数就会移位,如果数据没有保存,就会丢失。
主要方法
1.用于判断后续的hasNext*系列函数
这些方法使用不会将scanner移位,仅仅用于判断后续,但这个系列的函数有个比较尴尬的地方,在使用控制台输入数据的时候,且循环条件为while(scan.hasNext())
的时候,往往最后一行不能抓取到,必须按下回车之类的。
例如
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNextLine()) {
String str1 = sc.nextLine();
System.out.println("输入的数据为:" + str1 + " 长度 : " + str1.length());
if (str1.equals("q"))
break;
}
sc.close();
}
当你从txt复制数据到控制台的时候,有两种情况:
1.没有复制到空白的一行,光标在数据末尾。
2.复制到空白的一行,光标在新的一行首位。
输出有最后一行。
2用于得到输入的Next*系列函数
这里主要讨论Next()
和NextLine()
的区别
1.Next()
- 一定要读取到有效字符后才可以结束输入。
- 对输入有效字符之前遇到的空白,next() 方法会自动将其去掉。
- 只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
- next() 不能得到带有空格的字符串。
2.NextLine()
- 以Enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符。
- 可以获得空白。
3.两者混合使用
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNextLine()){
String str1 = sc.next();
System.out.println("next()抓取的数据为:" + str1 + " 长度 : " + str1.length());
String str2 = sc.nextLine();
System.out.println("nextLine()抓取的数据为:" + str2 + " 长度 : " + str2.length());
System.out.println();
if(str1.equals("q"))
break;
}
sc.close();
}
1
3
44
2 3 2 1 7 8 8
2 1 8 7
代码和输入数据为以上。
总之,对于同一行的数据来说,先使用Next()
会得到第一个数据,再使用一次NextLine()
如果这一行还有数据,就会读取后续的所有数据,不管是否为空格;如果这一行的数据没了,则会得到一个str.lenth()为0的空字符串;