2013-01-21 52 views
1
Scanner input = new Scanner(System.in); 
    System.out.print("\tEnter student no.: \t"); 
    long studNo = input.nextLong(); 
    System.out.println(studNo); 

如果我輸入0914325它只打印914325。我知道,因爲數據類型是long。我可以使用String數據類型,但是如果用戶不小心輸入了一個字母呢?有什麼辦法可以打印從0開始的號碼嗎?打印從0開始的數字輸入

+0

下面是關於此問題的另一個問題:http://stackoverflow.com/questions/275711/add-leading-zeroes-to-number-in-java –

回答

3

有沒有這樣的事情,以0開頭的數字。

數字存儲爲數字,而不是文本。
由於0044是相同的數字,它們的存儲是相同的。

如果您關心前導零,您應該使用String而不是Long,因爲您顯然沒有將它用作數字。
郵政編碼或電話號碼也是如此。

+0

有趣的是,你如何開始「沒有這樣的事情,作爲一個數字開始'0'「,然後以一個可能以零開始的電話號碼**的例子結束。這裏的問題可能是領域語言:) ..也許最好是說,爲了'保存'具有前導'0'的東西,你不能使用正常的「數字」類型, d需要一個'String'類型。 – Nanne

+0

@Nanne:電話號碼通常被處理的方式使得它們不是數字:你通常以特殊的方式對它們進行格式化,它們甚至不能被自動翻譯成對方。例如,諸如「1-800-SOMETHING」之類的虛榮數字是**不作爲它們的數字等價物存儲的。 –

+1

@Nanne:不;我說的電話號碼也是**不是**號碼。 – SLaks

0

正如SLaks說的那樣,它總是會切斷前導零。所以如果你想保留用戶輸入的原始格式,你應該將它存儲爲String。檢查它是否是有效數字的最好方法是使用正則表達式。

String s = input.getLine(); 
if(!s.matches("[0-9]+")){ 
    //prompt for input again 
} 

基本上這是如何工作的是它匹配輸入的字符串提供的模式。

所以我把[0-9] +作爲匹配的字符串,括號表示集合0-9中的任何數字。加號表示之前的模式重複一次或多次。所以這將檢查字符串中的每個字符以確保它們在0-9的範圍內。請記住,如果您再次將其轉換爲數字類型,則前導零將丟失。

0

使用

scanner.next("[0-9]+"); 

這確實你需要的所有驗證,上不匹配扔NoSuchElementException