Java Scanner类

时间:2020-02-23 14:37:24  来源:igfitidea点击:

Java 1.5中引入了Java的Scanner类(java.util.Scanner),它是一种简单的文本扫描程序,可以使用正则表达式解析原始类型和字符串。

Java Scanner类

Java Scanner类可用于使用任何正则表达式定界符将输入分解为令牌,这对于解析文件也非常有用。

扫描程序类可用于将文件数据读取为原始数据。
它还扩展了String split()方法以将令牌作为String,int,long,Integer和其他包装器类返回。

Java Scanner示例

其中我使用Scanner逐行读取文件,解析CSV文件以轻松创建java对象并从用户输入中读取。

JavaFileScanner.java

package com.theitroad.files;

import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Scanner;

public class JavaFileScanner {

  public static void main(String[] args) throws IOException {
      /**
       *  My Name is hyman
       *  My website is theitroad.local
       *  Phone : 1234567890
       */
      String fileName = "/Users/hyman/source.txt";
      Path path = Paths.get(fileName);
      Scanner scanner = new Scanner(path);
      
      //read file line by line
      scanner.useDelimiter(System.getProperty("line.separator"));
      while(scanner.hasNext()){
          System.out.println("Lines: "+scanner.next());
      }
      scanner.close();
      //read CSV Files and parse it to object array
      /**
       * hyman,28,Male
       * Lisa,30,Female
       * Mike,25,Male
       */
      scanner = new Scanner(Paths.get("/Users/hyman/data.csv"));
      scanner.useDelimiter(System.getProperty("line.separator"));
      while(scanner.hasNext()){
          //parse line to get Emp Object
          Employee emp = parseCSVLine(scanner.next());
          System.out.println(emp.toString());
      }
      scanner.close();
      
      //read from system input
      System.out.println("Read from system input:");
      scanner = new Scanner(System.in);
      System.out.println("Input first word: "+scanner.next());
  }
  
  private static Employee parseCSVLine(String line) {
       Scanner scanner = new Scanner(line);
       scanner.useDelimiter("\s*,\s*");
       String name = scanner.next();
       int age = scanner.nextInt();
       String gender = scanner.next();
       JavaFileScanner jfs = new JavaFileScanner();
       return jfs.new Employee(name, age, gender);
  }

  public class Employee{
      private String name;
      private int age;
      private String gender;
      
      public Employee(String n, int a, String gen){
          this.name = n;
          this.age = a;
          this.gender = gen;
      }
      
      @Override
      public String toString(){
          return "Name="+this.name+"::Age="+this.age+"::Gender="+this.gender;
      }
  }

}

上面程序的输出是:

Lines: My Name is hyman
Lines: My website is theitroad.local
Lines: Phone : 1234567890
Name=hyman::Age=28::Gender=Male
Name=Lisa::Age=30::Gender=Female
Name=Mike::Age=25::Gender=Male
Read from system input:
hyman Kumar
Input first word: hyman

我们可以使用java Scanner类将输入解析为特定的数据类型标记。