Java中的Scanner类是什么?何时引入?

直到Java 1.5从用户程序员那里读取数据之前,都依赖于字符流类和字节流类。

从Java 1.5开始引入Scanner类。此类接受File,InputStream,Path和String对象,使用正则表达式逐个令牌读取所有原始数据类型和String(从给定的源)令牌。

默认情况下,空格被视为定界符(将数据分成令牌)。

要使用此类提供的nextXXX()方法从源中读取各种数据类型,即nextInt(),nextShort(),nextFloat(),nextLong(),nextBigDecimal(),nextBigInteger(),nextLong(),nextShort() ,nextDouble(),nextByte(),nextFloat(),next()。

示例  -从键盘读取数据

随后的Java程序从用户读取姓名,出生日期,卷数和百分比,并打印回他的年龄和等级。在这里,我们使用Scanner类的方法读取数据。

示例

import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.Period;
import java.time.ZoneId;
import java.util.Date;
import java.util.Scanner;
public class ScannerExample {
   public static void main(String args[]) throws Exception {
      Scanner sc = new Scanner(System.in);
      System.out.println("输入你的名字: ");
      String name = sc.next();
      System.out.println("输入你的出生日期 (dd-MM-yyyy): ");
      String dob = sc.next();
      System.out.println("输入你的号码: ");
      int rollNumber = sc.nextInt();
      System.out.println("Enter your percentage: ");
      float percent = sc.nextFloat();
      //从给定的字符串获取Date对象
      Date date = new SimpleDateFormat("dd-MM-yyyy").parse(dob);
      LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
      //Calculating age
      Period period = Period.between(localDate, LocalDate.now());
      System.out.print("你好,"+name+" your current age is: ");
      System.out.print(period.getYears()+" 你现在的年龄是 "+period.getMonths()+" 又 "+period.getDays()+" days");
      System.out.println();
      if(percent>=80){
         System.out.println("你的成绩是: A");
      } else if(percent>=60 && percent<80) {
         System.out.println("你的成绩是: B");
      }
      else if(percent>=40 && percent<60){
         System.out.println("你的成绩是: C");
      } else {
         System.out.println("你的成绩是: D");
      }
   }
}

输出结果

输入你的名字:
Krishna
输入你的出生日期 (dd-MM-yyyy):
26-09-1989
输入你的号码:
1254
输入您的百分比:
83
你好,克里希纳你现在的年龄是:29岁又5天
你的成绩是: A