Scanner & BufferReader
Sacnner:是一个基于正则表达式的文本扫描器,可以从文件、输入流、字符串中解析出基本类型值和字符串值。
主要提供了两个方法来扫描输入:
1、boolean hasNextXxx():是否还有下一个输入项,其中Xxx可以是Int,Long等基本数据类型的字符串。如果需要判断是否包含下一个字符串,可省去Xxx。
2、string nextXxx():获取下一个输入项。
以下两个方法用来读取一行:
1、boolean hasNextLine():是否还有下一行
2、string nextLine():返回下一行的字符串
默认情况下,Scanner使用空白(空格、回车)作为多个输入项之间的分隔符。
public static void main(String[] args) {
//system.in代表标准输入,就是键盘输入
Scanner s1=new Scanner(System.in);
//只把回车作为分隔符
s1.useDelimiter("\n");
//判断是否还有下一个输入项
while(s1.hasNext()){
System.out.println(s1.next());
}
}
为Scanner设置分隔符使用useDelimiter(String pattern)方法即可,参数应是一个正则表达式。
Scanner不仅读取用户的键盘输入,还可以读取文件输入。只要在创建Scanner对象时,传入一个File对象作为参数即可。
public static void main(String[] args) throws FileNotFoundException {
//将一个file对象作为Scanner的构造器参数,则scanner读取文件内容
Scanner s1=new Scanner(new File("a.next"));
//判断是否还有下一行
while(s1.hasNextLine()){
System.out.println(s1.nextLine());
}
}
BufferedReader:是javaIO流中的一个字符串、包装类,它必须建立在另一个字符流的基础之上,但system.in是字节流,需用InputStreamReader将其包装成字符流。
public static void main(String[] args) throws IOException {
//以system.in节点流创建一个BufferedReader对象
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String buffer=null;
//逐行读取键盘输入
while((buffer=br.readLine())!=null){
System.out.println(buffer);
}
使用BufferedReader可以逐行读取用户的键盘输入,每次用户的键盘输入都被BufferedReader当成string对象。与Scanner不同的是,BufferedReader不能读取基本类型输入项,它总是读取string对象。