float entero convertir como java integer type-conversion character primitive

convertir - Conversión de caracteres a enteros en Java



convertir int a string java (6)

43 es el número de decimación del símbolo "+". Eso explica por qué obtienes un 43 de vuelta. http://en.wikipedia.org/wiki/ASCII

¿Puede alguien por favor explicarme qué está pasando aquí?

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

Esto imprime i: 43 ch:-1 . ¿Eso significa que tengo que confiar en las conversiones primitivas para convertir char a int ? Entonces, ¿cómo puedo convertir un Character a un número Integer ?

Editar: Sí, sé que Character.getNumericValue devuelve -1 si no es un valor numérico y eso tiene sentido para mí. La pregunta es: ¿por qué las conversiones primitivas devuelven 43 ?

Edit2: 43 es el ASCII para + , pero esperaría que el elenco no tuviera éxito al igual que getNumericValue no tuvo éxito. De lo contrario, eso significa que hay dos formas equivalentes semánticas para realizar la misma operación pero con resultados diferentes.


Como la documentación indica claramente, Character.getNumericValue() devuelve el valor del carácter como un dígito.
Devuelve -1 si el personaje no es un dígito.

Si desea obtener el punto de código numérico Unicode de un objeto de Character encuadrado, primero deberá destrabarlo:

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


Del Javadoc para Character#getNumericValue :

Si el carácter no tiene un valor numérico, entonces se devuelve -1. Si el carácter tiene un valor numérico que no se puede representar como un entero no negativo (por ejemplo, un valor fraccionario), se devuelve -2.

El personaje + no tiene un valor numérico, por lo que obtienes -1.

Actualizar:

La razón por la cual la conversión primitiva te está dando 43 es que el carácter ''+'' está codificado como el entero 43.


Pruebe cualquiera de los siguientes. Estos deberían funcionar:

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


Character.getNumericValue(c)

java.lang.Character.getNumericValue(char ch) devuelve el valor int que representa el carácter Unicode especificado. Por ejemplo, el carácter ''/u216C'' (el número romano cincuenta) devolverá un int con un valor de 50.

Las letras AZ en mayúsculas (''/u0041'' through ''/u005A'') , minúsculas (''/u0061'' through ''/u007A'') y variante de ancho completo (''/uFF21'' through ''/uFF3A'' and ''/uFF41'' through ''/uFF5A'') formularios tienen valores numéricos del 10 al 35. Esto es independiente de la especificación Unicode, que no asigna valores numéricos a estos valores char.

Este método devuelve el valor numérico del carácter, como un valor int no negativo;

-2 si el carácter tiene un valor numérico que no es un entero no negativo;

-1 si el personaje no tiene valor numérico.

Y here está el enlace.


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