Java: analizar el valor int de un char


223

Solo quiero saber si hay una mejor solución para analizar un número de un carácter en una cadena (suponiendo que sepamos que el carácter en el índice n es un número).

String element = "el5";
String s;
s = ""+element.charAt(2);
int x = Integer.parseInt(s);

//result: x = 5

(Inútil decir que es solo un ejemplo)

Respuestas:


444

Tratar Character.getNumericValue(char).

String element = "el5";
int x = Character.getNumericValue(element.charAt(2));
System.out.println("x=" + x);

produce:

x=5

Lo bueno de esto getNumericValue(char)es que también funciona con cadenas como "el٥"y "el५"dónde ٥y son los dígitos 5 en árabe oriental e hindi / sánscrito, respectivamente.


62

Intenta lo siguiente:

str1="2345";
int x=str1.charAt(2)-'0';
//here x=4;

si resta por char '0', el valor ASCII no necesita ser conocido.


1
¿Cuál es la razón de eso? el resultado es la resta entre el '0' en el ASCI y el char en el asci ???
ignacio chiazzo

10
@msj Porque los valores de '0', '1', '2', ...in ascii son ascendentes. Entonces, por ejemplo, '0' en ascii es 48, '1' es 49, etc. Entonces, si lo tomas '2' - '0', realmente obtienes 50 - 48 = 2. Eche un vistazo a una tabla ASCII para comprender mejor este principio. Además, 'x'significa obtener el valor ASCII del personaje en Java.
Kevin Van Ryckegem

1
@KevinVanRyckegem gracias! Yo estaba buscando qué - '0'trabajado ... pensé que era un poco de magia profunda en la manera de Java interpreta personajes o lo que sea ... Esto fue realmente un caso de mí más de lo que complica algo ...
Scoots

Aunque este es un buen truco, es menos legible que usarloCharacter.getNumericValue
Janac Meena

33

Probablemente sea lo mejor desde el punto de vista del rendimiento, pero es difícil:

String element = "el5";
String s;
int x = element.charAt(2)-'0';

Funciona si asumes que tu personaje es un dígito, y solo en idiomas que siempre usan Unicode, como Java ...


77
Intente eso con la cadena "el५"donde está el dígito 5 en India. :)
Bart Kiers

3
Estoy seguro de que trabajó duro para encontrar este ejemplo ... :-) Ok, si tiene que analizar dígitos no árabes, evite este método. Como dije, es duro. Pero sigue siendo el método más rápido en el 99.999% de los casos en que funciona.
Alexis Dufrenoy

@AlexisDufrenoy, ¿por qué restar el carácter '0'devuelve el valor entero?
Istiaque Ahmed

1
Mire los valores de la tabla ASCII char '9' = int 57, char '0' = int 48, esto da como resultado '9' - '0' = 57 - 48 = 9
WHDeveloper

1
Funciona de maravilla. lol @ contraejemplo y todos los indios que copiaron tu respuesta. la ironía.
omikes

16

Simplemente restando por char '0' (cero) un char (del dígito '0' a '9') se puede convertir en int (0 a 9), por ejemplo, '5' - '0' da int 5.

String str = "123";

int a=str.charAt(1)-'0';

6
String a = "jklmn489pjro635ops";

int sum = 0;

String num = "";

boolean notFirst = false;

for (char c : a.toCharArray()) {

    if (Character.isDigit(c)) {
        sum = sum + Character.getNumericValue(c);
        System.out.print((notFirst? " + " : "") + c);
        notFirst = true;
    }
}

System.out.println(" = " + sum);

0

Usando binario ANDcon 0b1111:

String element = "el5";

char c = element.charAt(2);

System.out.println(c & 0b1111); // => '5' & 0b1111 => 0b0011_0101 & 0b0000_1111 => 5

// '0' & 0b1111 => 0b0011_0000 & 0b0000_1111 => 0
// '1' & 0b1111 => 0b0011_0001 & 0b0000_1111 => 1
// '2' & 0b1111 => 0b0011_0010 & 0b0000_1111 => 2
// '3' & 0b1111 => 0b0011_0011 & 0b0000_1111 => 3
// '4' & 0b1111 => 0b0011_0100 & 0b0000_1111 => 4
// '5' & 0b1111 => 0b0011_0101 & 0b0000_1111 => 5
// '6' & 0b1111 => 0b0011_0110 & 0b0000_1111 => 6
// '7' & 0b1111 => 0b0011_0111 & 0b0000_1111 => 7
// '8' & 0b1111 => 0b0011_1000 & 0b0000_1111 => 8
// '9' & 0b1111 => 0b0011_1001 & 0b0000_1111 => 9

0
String element = "el5";
int x = element.charAt(2) - 48;

Restando el valor ascii de '0' = 48 de char

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.