本节目讨论的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就先说到这里了~