1. 程式人生 > >Scanner之先獲取一個數值,再獲取一個字串出錯

Scanner之先獲取一個數值,再獲取一個字串出錯

問題:
利用Scanner從控制檯獲取多個數據時,第一個為數值,第二個為字串,從控制檯輸入第一個資料,回車,還未輸入第二個資料就直接停止輸入,輸出結果只顯示數字的問題!
參考程式碼:

import java.util.Scanner;

public class ScannerDemo {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int a=sc.nextInt();
        String s=sc.nextLine();
        System.out
.println("a:"+a+",s:"+s); } }

執行結果:
這裡寫圖片描述
為什麼會出現這個問題?
分析:

  1. API中描述Scanner:

    一個簡單的文字掃描器,可以使用正則表示式解析基本型別和字串。

    注:即當輸入12回車則自動識別為int賦值給a,若為string型別則賦值給string型別。

  2. 在輸入12回車,則自動識別12賦值給a,而回車則為\n\r,識別為字串,則自動賦值給s,而回車在控制檯上又不顯示,那麼給我們的感覺則是,只輸入了一個就直接停止輸入了。

解決方案:

  1. 先獲取一個數值後,再建立一個新的鍵盤錄入物件獲取字串。(不推薦
  2. 把所有的資料都先按照字串獲取,然後再使用時需要什麼型別就轉換成什麼型別!(推薦

    如何轉換?
    (1). String轉Int
    String s1=sc.nextLine();
    int b=Integer.parseInt(s1);
    (2). String轉其他
    String s1=sc.nextLine();
    X b=Y.parseX(s1);
    注:其中X為基本型別(double、float、long、byte、boolean),Y為基本類(Double、Float、Long、Byte、Boolean)等;
    (3). String轉char
    String s1=sc.nextLine();
    char[] chs=s1.toCharArray();