java.util.Scanner是JDK1.5的新特性,主要功能是简化文本扫描。

使用Scanner类可以很方便地获取用户的键盘输入,Scanner是一个基于正则表达式的文本扫描器。它可以从文件、输入流、字符串中解析出基本类型值和字符串值。Scanner类提供了多个构造器,不同的构造器可以接受文件、输入流、字符串作为数据源,用于从文件、输出流、字符串中解析数据。

Scanner主要提供了两个方法来扫描输入。
①hasNextXxx():是否还有下一个输入项,其中Xxx可以是Int、Long等代表基本数据类型的字符串。如果只是判断是否包含下一个字符串,直接使用hasNext()。

②nextXxx():获取下一个输入项。Xxx的含义与前一个方法中Xxx相同。

默认情况下,Scanner使用空白(包括空格、Tab、回车)作为多个输入项之间的分隔符。下面使用Scanner来获得用户的键盘输入。

public class ScannerKeyBoardTest
{
    public static void main(String[] args)
    {
        //System.in代表标准输入,就是键盘输入
        Scanner sc = new Scanner(System.in);
        //增加下面一行将只把回车作为分隔符
        sc.useDelimiter("\n");
        while(sc.hasNext())
        {
            //输出输入项
            System.out.println("键盘输入内容是:" + sc.next());
        }
    }
}

如果希望改变Scanner的分隔符(不使用空白作为分隔符),例如,程序需要每次读取一行,不管这一行中是否包含空格,Scanner都把它当成一个输入项。在这种需求下,可以把Scanner的分隔符设置为回车符,不再使用默认的空白作为分隔符。

Scanner的读取操作可能被阻塞来等待信息的输入。如果输入源没有数。Scanner又读不到更多输入项时(尤其是在键盘输入时比较常见),Scanner的hasNext()和next()方法都可能阻塞,hasNext()方法是否阻塞与其相关的next()方法是否阻塞无关

Scanner设置分隔符使用useDelimiter(String pattern)方法即可,该方法的参数应该是一个正则表达式。

Scanner提供了两个简单的方法来逐行读取。
boolean hasNextLine():返回输入源中是否还有下一行。

String nextLine():返回输入源中下一行的字符串。

Scanner不仅能读取用户的键盘输入,还可以读取文件输入,只要在创建Scanner对象时传入一个File对象作为参数,就可以让Scanner读取该文件的内容。

public class ScannerFileTest
{
    public static void main(String[] args)
    throws Exception
    {
        //将一个File对象作为Scanner的构造器参数,Scanner读取文件
        Scanner sc = new Scanner(new
         File("ScannerFileTest.java"));
         System.out.println("ScannerFileTest.java
         文件内容如下:");
         //判断是否还有下一行
         while(sc.hasNextLine())
         {
             //输出文件中的下一行
             System.out.println(sc.nextLine());
         }
    }
}

上面程序会读取ScannerFileTest.java文件中的内容。上面使用了hasNextLine()和nextLine()两个方法来读取文件内容。

因为上面程序设计文件输入,可能会引发文件IO异常。