Scanner之先獲取一個數值,再獲取一個字串出錯
阿新 • • 發佈:2019-02-10
問題:
利用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);
}
}
執行結果:
為什麼會出現這個問題?
分析:
API中描述Scanner:
一個簡單的文字掃描器,可以使用正則表示式解析基本型別和字串。
注:即當輸入12回車則自動識別為int賦值給a,若為string型別則賦值給string型別。
在輸入12回車,則自動識別12賦值給a,而回車則為\n\r,識別為字串,則自動賦值給s,而回車在控制檯上又不顯示,那麼給我們的感覺則是,只輸入了一個就直接停止輸入了。
解決方案:
- 先獲取一個數值後,再建立一個新的鍵盤錄入物件獲取字串。(不推薦)
- 把所有的資料都先按照字串獲取,然後再使用時需要什麼型別就轉換成什麼型別!(推薦
如何轉換?
(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();