本节目讨论的Scanner为Java™ Platform Standard Ed. 8版本,请来自未来的Java同胞确认自己所处的Java版本时间线,未来的Scanner说不定已经改变了很多
最近参加了很多大公司的在线笔试,然后发现都采用Scanner来进行测试数据输入的,所以今天就简单的回顾了一下Scanner(只讲在线笔试能用到的常用的方法)
[0]Constructors-----构造器之说
俺先从构造器说起。
Scanner的构造器可以分为4种:
1.传入一个IO流,最常用的传入流System.in,这样就可以把我们在控制台输入的数据扫描进入了
Scanner s = new Scanner(System.in);
2.传入一个File对象
Scanner s = new Scanner(new File("myFile"));
随后你可以这么用(有关hasNextLong方法,next方法,不懂的可以先不管,这里你只要知道可以传入一个文件作为扫描对象)
while (s.hasNext()) {
long aLong = s.next();
}
3.传入一个Path对象
Scanner s = new Scanner(new Path("/Users/zazalu/lalala.txt")); ---->windows系统应该是\\Users\\zazalu\\lalala.txt,这里我只是凭经验写出来的路径,不行的话,你们自行百度下把:)
传入的Path对象所指向的文件,就会被Scanner扫描
4.传入一个Readable对象(感觉不常用,暂时不讲)
[1]Method ------方法之说
1.next(),nextInt(),nextLong(),nextLine() ........
比如我们在控制台输入为123 123
Scanner s = new Scanner(System.in);
System.out.println(s.next());
System.out.println(s.next());
上面的输出便是
123
123
如果你使用的是nextLine(),那么输出就会变成
123 123
注意点:除了nextLine(),其它nextXXX()默认采用空格进行分割!记住是空格分割!nextLine()应该是判断一行的末尾来进行分割
2.hasNext(),hasNextInt(),hasNextLong(),hasNextLine()......
方法含义:在Scanner传入的字符串中,是否有下一个String,Int,Long,等等等,有的话就返回true,没有就false
所以当我们要处理好几个String输入,或者好几个int值输入的时候,就可以这么用
Scanner s = new Scanner(“123 123”);
while (sc.hasNextInt()) {
System.out.printlin(s.nextInt());
}
输出为
123
123
3.其实上面讲的next和hasNext类别的方法,还接收一个radix参数,radix参数是什么呢?最常用的radix参数就是,2,10,16。这个radix代表二进制,十进制或者十六进制等
使用例子:将一个二进制数通过Scanner变成十进制数
Scanner s = new Scanner("1111");
System.out.println(s.nextInt(2));
输出为15
4. delimiters pattern ------分割模式
Scanner默认以空格进行分割!
当然大大们给我们api进行修改
String input = "1 fish 2 fish red fish blue fish";
Scanner s = new Scanner(input).useDelimiter("\\s*fish\\s*"); //这里可以用正则哦!,不知道正则的先去学学正则吧!
System.out.println(s.nextInt());
System.out.println(s.nextInt());
System.out.println(s.next());
System.out.println(s.next());
s.close(); //关闭这个Scanner!
输出为
1
2
red
blue
5.还有一个findInLine方法,想知道的自己去研究吧,这里不探讨了
好吧,Scanner就先说到这里了~