Java 5添加了java.Scanner类,这是一个新的实用程序,用于扫描输入文本。它是以前的Stringtokenizer和Matcher之间的某种组合。因为任何数据都必须通过同一模式的捕获组检索或使用索引检索文本的各个部分。因此,可以结合使用正则表达式和从输入流中检索特定类型数据项的方法。这样,除了使用正则表达式,Scanner类还可以随意分析字符串和基本类型(如int和double)的数据。借助Scanner,自定义语法分析器可以为任何要处理的文本内容编写。
Scanner类用于获取键盘输入(基于正则表达式的文本扫描仪)。它可以从文件、字符串和输入流中分析基本类型值和字符串值。Scanner类提供多个结构,支持多种方式,从文件、字符串和输入流中分析数据,可以接收文件、字符串和输入流作为数据源。
Scanner类主要提供两种扫描输入的方法:
hasNextXx():是否有下一个输入项,其中XX可以是Int、代表基本数据类型的字符串,如Long。如果只判断下一个字符串是否包含,则直接使用hasnext()。
nextXxx():获取下一个输入项。XXX的意思是一样的。默认情况下,Scanner使用空白(包括空格、Tab空白和返回)作为多个输入项的分隔符。
使用Scanner获取用户键盘输入:
public class Test{
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不断从键盘读取键盘输入,然后打印到控制台,程序运行结果如下:
java
键盘输入内容如下:java
c++
键盘输入内容如下:c++
html
键盘输入内容如下:html
为使用Scanner设置分隔符 useDelimiter(String pattern)该方法的参数为正则表达式(将在以后的发布中介绍),如果将上述程序的sc行.useDelimiter("\n")注释后,该程序将键盘的每行输入作为输入项,不以空格、Tab空白或回车为分隔符。
事实上,Scanner提供了两种简单的逐行读取方法:
boolean hasNextLine():是否还有下一行返回输入源。
String nextLine():返回输入源中下行字符串。
除了获得字符串输入项外,Scanner还可以获得任何基本类型的输入项,如下:
public class Test{
public static void main(String[] args){
//System.in代表键盘输入
Scanner sc = new Scanner(System.in);
///判断是否有下一个long整数
while(sc.hasNextlong()){
//输出输入项
System.out.println("键盘输入内容如下:"+sc.nextlong());
}
}
}
通过上述程序hasNextLong()和nextlong()两种方法可以直接获得输入的long型整数。如果需要获得其他基本类型的输入项,可以使用相同的方法。除了读取键盘输入外,Scanner还可以读取文件输入。只需在创建Scanner对象时输入File对象作为参数,如下例:
public class Test{
public static void main(String[] args) throws Exception{
///Scanner读取文件内容:将File对象作为Scanner的结构参数
Scanner sc = new Scanner(new File("Test.java"));
System.out.println("Test.java文件内容如下:");
///判断是否有下一行
while(sc.hasNextLine()){
////下一行输出文件
System.out.println(sc.nextLine());
}
}
}
因为涉及到以上程序IO读取可能会导致IO异常,因此程序声明throws Exception表明main方法不处理任何异常。
关于Java Scanner的知识都讲完了,希望看完这篇文章能对你有所帮助,当然,对于这些特殊的java类,本网站有专门的课程单独讲解。感兴趣的学生可以观看本网站java视频课程,各种java类从入门到精通指日可待。