2016-08-16 34 views
0

我學習JAVA,最近我有一些培訓任務,同樣的問題。款待八進制數的小數

我有一些數字,其中一些是從0開始。我發現這些數字是八進制的,這意味着它不會是我想要的數字或它給我一個錯誤(因爲「8」或「9」,因爲他們不是八進制數字)後,我讀它作爲一個int或長...

到現在爲止,我只需要使用兩位數字像14或05. 我把它們當作字符串並將它們轉換爲一個函數,檢查所有的字符串數字並將它們轉換爲像這樣的數字

String numStr = "02"; 

if(numStr.startsWith("0")) { 
    int num = getNumericValue(numStr.charAt(1)); 
} else { 
    int num = Integer.parseInt(numStr); 
} 

現在我有一個未知的l數字未知的數字(所以可能超過2)。我知道,如果我想我可以使用循環和.substring(),但必須有一個更簡單的方法。

有沒有辦法簡單地忽略零不知何故?

編輯:

直到現在我總是編輯我有是字符串的工作,因爲我無法找到解決問題的一個更簡單的方法的數字。當我有0010 27 09我不得不宣佈它像:
String[] numbers = {"0010", "27", "09"};
因爲如果我聲明它是這樣的:
int[] numbers = {0010, 27, 09};
號碼[0]將是8,而不是10號[2]會給我一個錯誤

其實我不想使用字符串。我真正想要的是讀取以零開頭的數字作爲數字(例如:int或long),但我希望它們是十進制的。問題是我有很多來自數據源的數字。我將它們複製到代碼中,並將其編輯爲數組的聲明。但我不想將它們編輯爲字符串,只是刪除零並重新編號。

+2

' 「numStr」 .charAt(1)''是'u''。而'Integer.parseInt(「numStr」)'將因'NumberFormatException'失敗,因爲'「numStr」'不是一個數字。 –

+0

您可以請張貼/示例輸入和輸出? –

+0

可能是脫離主題,但你已經使用雙引號內的字符串變量。它應該只是numStr而不是「numStr」。解析和獲取角色。 – iMan

回答

1

我不太清楚你想要達到的目標。您是否希望能夠讀取Integer,格式爲8-based(案例1),格式爲String?或者你想讀這樣的String,並把它解釋爲10-based雖然它是8-based(案例2)? 或者你只是想知道如何創建這樣一個Integer而無需手動轉換它(案例3)?

情況1:

String input = "0235"; 
// Cut the indicator 0 
input = input.substring(1); 

// Interpret the string as 8-based integer. 
Integer number = Integer.parseInt(input, 8); 

情況2:

String input = "0235"; 
// Cut the indicator 0 
input = input.substring(1); 

// Interpret the string as 10-based integer (default). 
Integer number = Integer.parseInt(input); 

情況3:

// Java interprets this as octal number 
int octal = 0235; 
// Java interprets this as hexadecimal number 
int hexa = 0x235 
// Java interprets this as decimal number 
int decimal = 235 

可以通過使向指示器擴大Case 1到智能方法:

public Integer convert(final String input) { 
    String hexaIndicator = input.substring(0, 2); 

    if (hexaIndicator.equals("0x")) { 
     return Integer.parseInt(input.substring(2), 16); 
    } else { 
     String octaIndicator = input.substring(0, 1); 

     if (octaIndicator.equals("0")) { 
      return Integer.parseInt(input.substring(1), 8); 
     } else { 
      return Integer.parseInt(input); 
     } 
    } 
} 
+0

對不起,這個問題的措辭很差,我試圖指定它,我希望它現在好了 這不是我想知道的,但它包含我不知道所以謝謝的東西。 –

+0

啊,你的輸入('String's)應該都被當作十進制數,但是它們可以有任意多個**前導**零,因爲'Integer.parseInt(input)'失敗了,所以應該被忽略?想要移除給定'String'的所有前導零?你可以簡單地用正則表達式來完成離子,「正則表達式」。 'String'的replaceAll'方法接受這樣的'Regex'。嘗試以下方法:'input = input.replaceAll(「^ 0 *」,「」);'用空的'String'替換所有出現的前導零。你可以在這裏試試:[https://regex101.com/r/oW4oM6/1](https://regex101.com/r/oW4oM6/1) – Zabuza