2012-05-09 51 views
1

我試圖將字符串的用戶輸入轉換爲int。有沒有問題,我使用下面的代碼:Java字符串到int二進制數轉換

c = sc.next(); 
while(!c.contains("#")){ 
    i = Integer.parseInt(c); 
    input.add(c); 
    c= sc.next(); 
} 

(這僅僅是,掃描儀部分工作的執行轉換的代碼的一部分)

唯一的問題是,輸入是二進制數字,所以當輸入是,例如「00111」,轉換器給我「111」,我不能失去那些0。我怎樣才能將用戶輸入轉換爲數字而不會丟失左邊的零?

+0

是這些小端的二進制數字嗎? –

+0

你不能錯過零,但還剩下一個數字。它必須是零填充字符串才能表示這種方式。 – adarshr

+0

你能解釋爲什麼你不能失去零點嗎? – dj18

回答

8

如果00111111不同,那麼你不能將它存儲爲整數,你需要將它們存儲爲字符串。

但是請注意,即使是二進制,00111 等於111 。

要解析的二進制文字並將其存儲在一個整數,你用

Integer.parseInt(c, 2); 

(但這並不解決保持前導零的問題。)

+0

至於保持前導零,你應該使用'NumerFormat'類。類似於'formatter = new DecimalFormat(「00 ###」);'然後'String result = formatter.format(Integer.parseInt(c,2));' – Shine

2

Integer.parseInt("00111", 2);

但是您必須事先知道基數來區分二進制(2)和十進制(10)數字。

或者我也許不明白你的問題?有關「丟失0」的陳述有點難以理解。

+0

這對'00111'仍然會產生相同的結果和'111'。 – aioobe

+0

對不起,錯誤。 –

3

你應該使用:

Integer.parseInt(c, 2) 
+0

這對'00111'和'111'仍然會產生相同的結果。 – aioobe

+0

@aioobe,當然。但我認爲運算混淆是從二進制到十進制的轉換。做Integer.parseInt(「00111」)返回111.這個「111」是以10爲底的整數,但是OP認爲它是以2爲底的整數。 –

0

爲了節省前導零的二進制字符串s:

從字符串到整數追加一個「1」作爲前綴S和轉換爲整數。

從整數到字符串:將整數轉換爲二進制字符串並刪除第一個「1」。