web-dev-qa-db-ja.com

Javaで文字を整数に変換する

誰かがここで何が起こっているのか私に説明してください:

char c = '+';
int i = (int)c;
System.out.println("i: " + i + " ch: " + Character.getNumericValue(c));

これはi: 43 ch:-1を出力します。それは私がcharintに変換するためにプリミティブ変換に頼らなければならないことを意味しますか?それではどうやってCharacterIntegerに変換できますか?

編集:はい私はCharacter.getNumericValueが数値ではないなら-1を返すことを知っています、そしてそれは私にとって意味があります。問題は、プリミティブ変換を行うと43が返されるのはなぜですか?

Edit2:43+のASCIIですが、getNumericValueが成功しなかったのと同じようにキャストが成功しないことを期待します。さもなければそれは同じ操作を実行するが異なる結果で2つの意味上同等な方法があることを意味しますか?

57
JRR
Character.getNumericValue(c)

Java.lang.Character.getNumericValue(char ch)は、指定されたUnicode文字が表すint値を返します。例えば、文字'\u216C'(ローマ数字50)は、値50のintを返します。

大文字の('\u0041' through '\u005A')、小文字の('\u0061' through '\u007A')、および全角変形の('\uFF21' through '\uFF3A' and '\uFF41' through '\uFF5A')形式のAからZの文字は、10から35までの数値を持ちます。これは、これらのchar値に数値を割り当てないUnicode仕様とは無関係です。

このメソッドは、文字の数値を負でないint値として返します。

文字が負でない整数ではない数値を持つ場合は-2。

文字に数値がない場合は-1。

そして ここ がリンクです。

84
Trying

ドキュメントが明確に述べているように、Character.getNumericValue()は文字の値を数字として返します。
文字が数字でない場合は-1を返します。

ボックス化されたCharacterオブジェクトの数値Unicodeコードポイントを取得したい場合は、まずそれをボックス化解除する必要があります。

int value = (int)c.charValue();
40
SLaks

以下のいずれかを試してください。これらはうまくいくはずです。

int a = Character.getNumericValue('3');
int a = Integer.parseInt(String.valueOf('3');
33
Mani P

Character#getNumericValueのJavadocから:

文字が数値を持たない場合は、-1が返されます。文字が負でない整数として表すことができない数値(例えば、小数値)を持つ場合、-2が返されます。

文字+は数値を持たないので、-1になります。

更新:

原始変換が43を与えているのは、文字 '+'が整数43としてエンコードされているからです。

2
Aurand

43は、「+」記号の10進数です。それはなぜあなたが43を取り戻すのかを説明します。 http://en.wikipedia.org/wiki/ASCII

1
Fareed Quraishi
public class IntergerParser {

public static void main(String[] args){
String number = "+123123";
System.out.println(parseInt(number));
}

private static int parseInt(String number){
    char[] numChar = number.toCharArray();
    int intValue = 0;
    int decimal = 1;
    for(int index = numChar.length ; index > 0 ; index --){
        if(index == 1 ){
            if(numChar[index - 1] == '-'){
                return intValue * -1;
            } else if(numChar[index - 1] == '+'){
                return intValue;
            }
        }
        intValue = intValue + (((int)numChar[index-1] - 48) * (decimal));
        System.out.println((int)numChar[index-1] - 48+ " " + (decimal));
        decimal = decimal * 10;
    }
    return intValue;
}