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异常。