2011-02-11 14 views
171

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).Java: analizar el valor int de un char

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

//result: x = 5 

(inútil decir que es sólo un ejemplo)

Respuesta

351

Trate Character.getNumericValue(char).

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

produce:

x=5 

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

+0

awesome! Gracias – deFreitas

26

Eso es probablemente la mejor desde el punto de vista del rendimiento, pero es áspera:

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

funciona si se asume que su carácter es un dígito, y sólo en los idiomas siempre utilizando Unicode, como Java ...

+7

Pruébalo con la cadena '" el5 "' donde '5' es el dígito 5 en India. :) –

+2

Estoy seguro de que trabajó duro para encontrar este ejemplo ... :-) De acuerdo, si tiene que analizar los 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 donde funciona. –

+0

@AlexisDufrenoy, ¿por qué restar el carácter ''0'' devolver el valor entero? –

49

intente lo siguiente:

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

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

+1

¿Cuál es el motivo? el resultado es la resta entre el '0' en el ASCI y el char en el asci ??? –

+6

@msj Porque los valores de ''0', '1', '2', ...' en ascii son ascendentes. Por ejemplo, '0' en ascii es 48, '1' es 49, etc. Así que si tomas ''2' - '0'' realmente solo 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. –

5
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); 
16

restando simplemente por Char '0' (cero) un char (de dígitos '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';