2013-10-15 6 views
52

の整数に文字を変換すると、誰かがここで何が起こっているか私に説明していただけます。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つの意味的に同等の方法がありますが、結果は異なります。

+1

を、あなたが取得する代わりに、 '43'ことを期待したのは何? –

+4

私は 'getNumericValue'はあなたが思っているとは思いません。これは、文字を整数に変換するユーティリティメソッドです(文字 '5'を整数5と同じように)。これはキャスト(文字 '5'を整数53に変換する)と同じではありません。 – Aurand

+0

キャストは数字の数値を返しません。これらの2つの操作は2つの異なることを行います。 – SLaks

答えて

38

ドキュメントにはっきりと記載されているように、Character.getNumericValue()は、文字の値を数字として返します。
文字が数字でない場合は-1を返します。

あなたが箱入りCharacterオブジェクトの数値Unicodeコードポイントを取得したい場合は、あなたがそれを最初にVHS版する必要があります:

int value = (int)c.charValue(); 
+5

そのドキュメントにリンクしたい場合があります。http://docs.oracle.com/javase/7/docs/api/java/lang/Character.html#getNumericValue%28char%29 –

2

をJavadocのよりCharacter#getNumericValueのために:

の場合文字に数値がない場合、-1が返されます。 文字に、0以外の整数(小数点以下の桁数など)で表現できない数値がある場合、-2は が返されます。

文字が+の場合、-1が表示されます。

更新:

プリミティブ変換はあなたに43を与えていることを理由は、文字「+」を指定することをint値は整数43

77
Character.getNumericValue(c) 

java.lang.Character.getNumericValue(char ch)リターンとしてエンコードされていることですUnicode文字が表します。例えば、文字'\u216C'(ローマ数字の50)は、それらの大文字('\u0041' through '\u005A')で50

文字の値AZ、('\u0061' through '\u007A')小文字、及び全幅変異('\uFF21' through '\uFF3A' and '\uFF41' through '\uFF5A')フォームでINTが返される10から35を介して数値を有しますこれは、これらのchar値に数値を割り当てないUnicode仕様とは独立しています。

このメソッドは、文字の数値を0以外の値の として返します。

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

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

hereがリンクです。

32

次のいずれかを試してください。これらの作業をする必要があります:

int a = Character.getNumericValue('3'); 
int a = Integer.parseInt(String.valueOf('3'); 
1
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; 
} 
関連する問題