1. 程式人生 > >JAVA IO:Scanner類

JAVA IO:Scanner類

nerd bsp 字符 都是 sep exception import exc end

使用Scanner類接收輸入數據。

JAVA提供了專門的輸入數據類,此類可以完成BufferedReader類的功能,也可以方便的對輸入數據進行驗證,此類存放於JAVA.UTILL包中。

常用方法如下:

技術分享

此類不在java.io中,而在java.utill類,所以此類是一個工具類。

1,使用Scanner接收鍵盤輸入數據

package 類集;
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) ; } };

運行結果:

輸入數據:2123
輸入的數據為:2123

比直接使用BufferedReader類方便,但是以上程序還是存在問題。

如果輸入數據之間存在空格,會以空格為分隔符。如果要想輸入空格,則必須修改分隔符,將分隔符變成"\n"。

Pattern delimiter()    返回此 Scanner 當前正在用於匹配分隔符的 Pattern。 

修改分隔符:

package 類集;
import java.util.* ;
public class ScannerDemo01{
    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) ; } };

輸入結果:

輸入數據:3243 423423 43242
輸入的數據為:3243 423423 43242

之前輸入都是以字符串形式返回,實際上也可以使用Scanner方便返回整數或者小數。

有以下方法:

接收整數:

1,判斷是否是整數,如果是,返回true:hasNextInt()。

2,public int getInt();

接收小數:

1,判斷是否小數,:hasNextFloat()

2,public float getFloat()

package 類集;
import java.util.* ;
public class ScannerDemo01{
    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("輸入的不是小數!") ;
        }
    }
};

運行結果:

輸入整數:32
整數數據:32
輸入小數:12312
小數數據:12312.0

處理日期類型

Scanner類雖然可以接受各種類型,但是對於日期型卻無法接收!

如果要想接收Data類型的數據,只能通過字符串轉型,但是接收的時候依然可以使用Scanner類中提供的方法驗證:

驗證:public String hasnext(Pattern pattern)

接收:public String netxt(Pattern pattern)

package 類集;
import java.text.SimpleDateFormat;
import java.util.* ;
public class ScannerDemo01{
    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}$")){    // 判斷
            str = scan.next("^\\d{4}-\\d{2}-\\d{2}$") ;    // 接收
            try{
                date = new SimpleDateFormat("yyyy-MM-dd").parse(str) ;  //字符串轉換成日期類型。
            }catch(Exception e){}
        }else{
            System.out.println("輸入的日期格式錯誤!") ;
        }
        System.out.println(date) ;
    }
};

運行結果:

輸入日期(yyyy-MM-dd):2032-90-90
Mon Aug 29 00:00:00 CST 2039

還可以直接從文件中讀取信息。

package 類集;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.* ;
public class ScannerDemo01{
    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) ; } };

運行結果:

文件中內容如下:

技術分享

實際讀取結果:(因為他默認以空格為分隔符)

文件內容為:321312312312
43
3432

JAVA IO:Scanner類