Conversione di caratteri in numeri interi in Java

Qualcuno può spiegarmi cosa sta succedendo qui:

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

Questo stampa i: 43 ch:-1 . Significa che devo fare affidamento sulle conversioni primitive per convertire char in int ? Quindi, come posso convertire un Character in Integer ?

Modifica: Sì, so che Character.getNumericValue restituisce -1 se non è un valore numerico e ha senso per me. La domanda è: perché le conversioni primitive restituiscono 43 ?

Edit2: 43 è l’ASCII per + , ma mi aspetto che il cast non abbia successo proprio come getNumericValue non ha avuto successo. Altrimenti ciò significa che ci sono due modi semantici equivalenti per eseguire la stessa operazione ma con risultati diversi?

 Character.getNumericValue(c) 

java.lang.Character.getNumericValue(char ch) restituisce il valore int che rappresenta il carattere Unicode specificato. Ad esempio, il carattere '\u216C' (il numero romano cinquanta) restituirà un int con un valore di 50.

Le lettere AZ nella loro maiuscola ('\u0041' through '\u005A') , in minuscolo ('\u0061' through '\u007A') e la variante a larghezza intera ('\uFF21' through '\uFF3A' and '\uFF41' through '\uFF5A') moduli hanno valori numerici da 10 a 35. Questo è indipendente dalla specifica Unicode, che non assegna valori numerici a questi valori char.

Questo metodo restituisce il valore numerico del carattere, come valore int non negativo;

-2 se il personaggio ha un valore numerico che non è un numero intero non negativo;

-1 se il personaggio non ha valore numerico.

Ed ecco il link.

Come afferma chiaramente la documentazione, Character.getNumericValue() restituisce il valore del carattere come una cifra.
Restituisce -1 se il carattere non è una cifra.

Se si desidera ottenere il punto codice Unicode numerico di un object Character in riquadri, sarà necessario prima decomprimerlo:

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

Prova uno dei seguenti. Questi dovrebbero funzionare:

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

Da Javadoc per Character#getNumericValue :

Se il personaggio non ha un valore numerico, viene restituito -1. Se il carattere ha un valore numerico che non può essere rappresentato come un numero intero non negativo (ad esempio, un valore frazionario), viene restituito -2.

Il personaggio + non ha un valore numerico, quindi stai ricevendo -1.

Aggiornare:

La ragione per cui la conversione primitiva ti dà 43 è che il carattere ‘+’ è codificato come numero intero 43.

43 è il numero dec ascii per il simbolo “+”. Questo spiega perché hai indietro un 43. http://en.wikipedia.org/wiki/ASCII

 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; }