2016-08-16 3 views
0

私はJAVAを学んでいますが、最近私はいくつかの訓練タスクで同じ問題を抱えていました。8進数を小数として扱います

私はいくつかの数字を持っていますが、そのうちのいくつかは0から始まっています。これらの数字は8進数なので、私が望む数字にならないか、 "9"は8進数ではないためです)。

これまでは、14または05のような2桁の数字で作業していました。 私は文字列として扱いましたそして今、私は未知リットルを持っている文字列番号のすべてをチェックし、この

String numStr = "02"; 

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

のような番号に変換機能を備えた数値にそれらを変換します桁数が不明な番号の番号(おそらく2以上)。私が知りたいのであれば、ループと.substring()を使うことができますが、もっと簡単な方法が必要です。

どうにかゼロを無視する方法はありますか?

編集:今まで私はいつも、私は問題を解決する簡単な方法を見つけることができなかったためであると文字列で仕事をしていた番号を編集し

。私は0010 27 09を持っていたとき、私はそれが好きで宣言しなければならなかった:
String[] numbers = {"0010", "27", "09"};
私はこのようにそれを宣言するため、場合:
int[] numbers = {0010, 27, 09};
番号が[0]の代わりに10と数字の8になります[2]私にエラーを与える

実際に私はStringsで作業したくありません。私が実際に望むのは、数値でゼロから始まる数字(intやlongなど)を読み込むことですが、小数点にしたいのです。問題は、ソースから数が多いことです。私はそれらをコードにコピーし、配列の宣言として編集しました。しかし、私はゼロを削除して再び数値にするために、それらをストリングに編集したくありません。

+2

'' numStr ".charAt(1)'は '' u ''です。 '' numStr "'は数字ではないので、 '' Integer.parseInt( "numStr") 'は' NumberFormatException'で失敗します。 –

+0

期待どおりの入力と出力を投稿してください。 –

+0

話題にならないかもしれませんが、あなたの文字列変数を二重引用符で囲みました。 numStrでなく、 "numStr"でなければなりません。解析とキャラクターの取得。 – iMan

答えて

1

私はあなたが達成したいとは思っていません。 8-based形式(ケース1)でStringと表示されているIntegerを読むことはできますか?あるいは、Stringを読んで8-based(ケース2)ですが、10-basedと解釈しますか? または、手動で変換せずにそのような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(入力) 'それらに失敗した?だからので無視されるはずです、任意の多くの**大手**ゼロを有することができ、与えられた 'String'の先行するゼロをすべて削除したいのですか?あなたは単純に正規表現でそれを行うことができますイオン、 '正規表現' 'String'の' replaceAll'メソッドはこのような 'Regex'を受け入れます。以下を試してください: 'input = input.replaceAll("^0 * "、" ");'先頭のゼロのすべての出現を空の 'String'で置き換えます。ここで試してみることができます:[https://regex101.com/r/oW4oM6/1](https://regex101.com/r/oW4oM6/1) – Zabuza

関連する問題