Java IO _Scanner 类

1、掌握Scanner 类的作用

2、使用Scanner 接收输入数据

Java IO _Scanner 类_第1张图片

此类不在java.io 包中,而在java.util 包中,所以,此类是一个工具类。

使用Scanner 接收键盘的输入数据:

import java.util.* ;
public class ScannerDemo01{
	public static void main(String args[]){
		Scanner scan = new Scanner(System.in) ;	// 从键盘接收数据
		System.out.print("输入数据:") ;
		String str = scan.next() ;	// 接收数据
		System.out.println("输入的数据为:" + str) ;
	}
};

比直接使用BufferedReader 更加方便。但是,以上的输入数据代码实际上是存在问题的。

如果输入数据之间存在了空格,则会以空格为分隔符。如果要想输入空格的话,则就必须修改分隔符,将分隔符就成“\n”.

public Scanner useDelimiter(String pattern)
修改分隔符:

import java.util.* ;
public class ScannerDemo02{
	public static void main(String args[]){
		Scanner scan = new Scanner(System.in) ;	// 从键盘接收数据
		System.out.print("输入数据:") ;
		scan.useDelimiter("\n") ;
		String str = scan.next() ;	// 接收数据
		System.out.println("输入的数据为:" + str) ;
	}
};
之前的输入数据都是以字符串的形式返回的,实际上使用Scanner 类也可以方便的直接返回整数或者小数。

有以下的方法:

接收整数

|- 判断是否是整数: public booleanhasNextInt(),判断是否是整数,如果是则返回true

|-接收数据 :public intnextInt()

接收小数

|-判断是否是小数:public booleanhasNextFloat()

|- 接收数据: public floatnextFloat()

import java.util.* ;
public class ScannerDemo03{
	public static void main(String args[]){
		Scanner scan = new Scanner(System.in) ;	// 从键盘接收数据
		int i = 0 ;
		float f = 0.0f ;
		System.out.print("输入整数:") ;
		if(scan.hasNextInt()){	// 判断输入的是否是整数
			i = scan.nextInt() ;	// 接收整数
			System.out.println("整数数据:" + i) ;
		}else{
			System.out.println("输入的不是整数!") ;
		}
		System.out.print("输入小数:") ;
		if(scan.hasNextFloat()){	// 判断输入的是否是小数
			f = scan.nextFloat() ;	// 接收小数
			System.out.println("小数数据:" + f) ;
		}else{
			System.out.println("输入的不是小数!") ;
		}
	}
};
Scnaner 这个类虽然可以接收各种类型,但是对于日期型的数据却无法接收。

如果要想接收Date 类型的数据,则只能通过字符串转型,但是在接收的时候依然可以使用Scanner 类中提供的方法进行验证:

验证:public boolean hasNext(Pattern pattern)

接收: public String next(Pattern pattern)

import java.util.* ;
import java.text.* ;
public class ScannerDemo04{
	public static void main(String args[]){
		Scanner scan = new Scanner(System.in) ;	// 从键盘接收数据
		String str = null ;
		Date date = null ;
		System.out.print("输入日期(yyyy-MM-dd):") ;
		if(scan.hasNext("^\\d{4}-\\d{2}-\\d{2}{1}quot;)){	// 判断
			str = scan.next("^\\d{4}-\\d{2}-\\d{2}{1}quot;) ;	// 接收
			try{
				date = new SimpleDateFormat("yyyy-MM-dd").parse(str) ;
			}catch(Exception e){}
		}else{
			System.out.println("输入的日期格式错误!") ;
		}
		System.out.println(date) ;
	}
};
还可以直接从文件中读取信息。

假设:d:\test.txt 文件(有内容)
使用scanner 直接读取文件内容

import java.util.* ;
import java.text.* ;
import java.io.* ;
public class ScannerDemo05{
	public static void main(String args[]){
		File f = new File("D:" + File.separator + "test.txt") ;	// 指定操作文件
		Scanner scan = null ;
		try{
			scan = new Scanner(f) ;	// 从键盘接收数据
		}catch(Exception e){}
		String str = null ;
		if(scan.hasNext()){
			str = scan.next();	//	取数据
		}
		System.out.println("文件内容为:" + str) ;
	}
};
现在的文件内容确实读取进来,但是此程序依然不完美。以上只能读取出第一行数据,因为存在换行,所以认为读完了。
import java.util.* ;
import java.text.* ;
import java.io.* ;
public class ScannerDemo05{
	public static void main(String args[]){
		File f = new File("D:" + File.separator + "test.txt") ;	// 指定操作文件
		Scanner scan = null ;
		try{
			scan = new Scanner(f) ;	// 从键盘接收数据
		}catch(Exception e){}
		StringBuffer str = new StringBuffer() ;
		while(scan.hasNext()){
			str.append(scan.next()).append('\n')	;	//	取数据
		}
		System.out.println("文件内容为:" + str) ;
	}
};
在使用Scanner 读文件的时候,要考虑到换行的功能。


总结:

1、掌握Scanner 类作用:方便的读取数据

2、在读取操作的时候一定要注意分隔符的影响





你可能感兴趣的:(java,exception,IO,String,Class,import)