编程知识 cdmana.com

Java - IO 扫描流:Scanner

IO_扫描流:Scanner

在改进输出功能不足方面提供了打印流(PrintSream);利用BufferedReader类(缓冲输入流)解决了大文本数据的输入和读取操作,但是BufferedReader类在读取数据时只可以按照字符串方式读取(public String readLine();)且固定使用换行\n作为分隔符,由此暴露出BufferedReader类的功能不足以未来的大发展。

Scanner类

  • java.util.Scanner:(JDK 1.5
    • 专门负责解决输入流的操作问题

    public final class Scanner extends Object implements Iterator<String>

  • 构造方法:
public Scanner(File source)
public Scanner(InputStream source)
public Scanner(Readable source)
public Scanner(ReadableByteChannel source)
public Scanner(String source)
  • 类方法

判断是否有指定数据:

public boolean hasNextXxx();
// 举例:
public boolean hasNext();//表示有数据
public boolean hasNextDouble();//表述输入的是小数

取出数据:

public String nextXxx();
// 举例:
public String next();//默认返回字符串
public double nextDouble();//自动转型返回double数据

除了利用hasNextXxx() 和 nextXxx() 方法判断数据以外,在hasNext() 和 next() 方法中支持使用正则表达式对数据进判断

public boolean hasNext(regax);
public String next(regax);

实例:

public class TestDemo {
	public static void main(String [] args) throws IOException {
		// 准备接收键盘输入数据;System.in是InputStream型
		Scanner scan = new Scanner(System.in);
		if (scan.hasNextString()) {//判断是否有数据
			System.out.println(scan.next()); //输出
		}
		scan.close();
	}
} 
  • 设置分隔符
public Scanner useDelimiter(String pattern);
public class TestDemo { 
	public static void main(String [] args) throws IOException {
		Scanner scan = new Scanner(new FileInputStream(new File("F:"+File.separator+"demo"+File.separator+"demo.txt")));
		scan.useDelimiter("\r\n");//设置 、\r\n 作为换行符
		while(scan.hasNext()) {
			System.out.println(scan.next());
		}
		scan.close();
	}
} 

总结

在读取数据的时候,综合角度:Scanner类 比 BufferedReader 简单;在发现Scanner无法实现的时候再使用BufferedReader

  • InputStream类的功能不足问题被 Scanner 类解决
  • Reader类的功能不足问题被 BufferedReader 类解决
  • OutputStream类的功能不足问题被 PrintStream 类解决
  • Writer类的功能不足问题被 PrintWrite 类解决

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

版权声明
本文为[Mirror王宇阳]所创,转载请带上原文链接,感谢
https://cloud.tencent.com/developer/article/1747173

Scroll to Top