java中Scanner类有什么作用
Scanner的作用是通过分隔符模式将其输入分解为标记,默认情况下该分隔符模式与空白匹配。然后可以使用不同的 next 方法将得到的标记转换为不同类型的值。
例如,以下代码使用户能够从 System.in 中读取一个数:
Scanner sc = new Scanner(System.in);
int i = sc.nextInt();
再看一个例子,以下代码使 long 类型可以通过 myNumbers 文件中的项分配:
Scanner sc = new Scanner(new File("myNumbers"));
while (sc.hasNextLong()) {
long aLong = sc.nextLong();
}
扩展资料
Scanner类的基本用法:
Scanner是Java 1.5新增的类,可以使用该类创建一个默认指向键盘的对象。
Scanner reader=new Scanner(System.in);
然后reader对象调用下列方法(函数),读取用户在命令行输入的各种数据类型: nextByte(),nextDouble(),nextFloat,nextInt(),nextLine(),nextLong(),nextShort() 。
上述方法执行时都会造成堵塞,等待用户在命令行输入数据后回车确认。例如,拥护在键盘输入12.34,hasNextFloat()的值是true,而hasNextInt()的值是false。nextLine()等待用户输入一个文本行并且回车,该方法得到一个String类型的数据。
参考资料来源:百度百科:Scanner
所以,每段程序只能有一个接收器(Scanner)
其次,PrintStream,可以用于向控制台输出运行时数据
实质上,java的API在内部实现控制台输出就是用的PrintStream(System.*)来做的,而这个Scanner则是可以接受控制台的输入数据,供正在运行程序使用,有点像c里面的scanf
最后,一个例子
import java.util.Scanner;
public class TestScanner {
/**
* 测试
* @param args
*/
public static void main(String[] args) {
//构造Scanner对象的引用
Scanner scan = new Scanner(System.in);
System.out.println("请在控制台输入一个数字:");
//输入数字之后按下回车
int i = scan.nextInt();
//显示刚刚输入的数字
System.out.println("您刚刚输入的数字是:" + i);
}
}
Scanner reader=new Scanner(System.in);
2、reader对象调用下列方法(函数),读取用户在命令行输入的各种数据类型:next.Byte(),nextDouble(),nextFloat,nextInt(),nextLine(),nextLong(),nextShot()上述方法执行时都会造成堵塞,等待用户在命令行输入数据回车确认.
3、例如,拥护在键盘输入12.34,hasNextFloat()的值是true,而hasNextInt()的值是false. NextLine()等待用户输入一个文本行并且回车,该方法得到一个String类型的数据。
Scanner是一个新的操作类,是在java.util包中提供的一个操作类,使用此类可以方便的完成输入流的输入操作。
package org.lxh.scannerdemo;
import java.util.Scanner;
public class ScannerDemo01 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in) ;
int i = 0 ;
if(scan.hasNextInt()){
i = scan.nextInt() ;
}
System.out.println("i = " + i) ;
}
}
例如,下面再看一个可以接收字符串的例子
package org.lxh.scannerdemo;
import java.util.Scanner;
public class ScannerDemo02 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in) ;
String str = null ;
if(scan.hasNext()){
str = scan.next() ;
}
System.out.println("str = " + str) ;
}
}
使用此类也可以进行正则匹配,例如:输入日期格式
package org.lxh.scannerdemo;
import java.util.Scanner;
public class ScannerDemo03 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in) ;
String str = null ;
if(scan.hasNext("\\d{4}-\\d{2}-\\d{2}")){
str = scan.next() ;
}
System.out.println("str = " + str) ;
}
}
但是,此类因为接收的是输入流的操作类,所以也可以使用此类完成文件内容的读取。
package org.lxh.scannerdemo;
import java.io.File;
import java.io.FileInputStream;
import java.util.Scanner;
public class ScannerDemo04 {
public static void main(String[] args) throws Exception {
File file = new File("C:" + File.separator + "demo.txt") ;
Scanner scan = new Scanner(new FileInputStream(file)) ;
StringBuffer buf = new StringBuffer() ;
scan.useDelimiter("\n") ;
while(scan.hasNext()){
buf.append(scan.next()).append("\n") ;
}
System.out.println("buf = " + buf) ;
}
}
需要设置读取的分隔符。