Pregunta ¿Cómo convierto un String a un int en Java?


¿Cómo puedo convertir un String a una int en Java?

Mi cadena contiene solo números, y quiero devolver el número que representa.

Por ejemplo, dada la cadena "1234" el resultado debe ser el número 1234.


2514
2018-04-07 18:27


origen


Respuestas:


String myString = "1234";
int foo = Integer.parseInt(myString);

Ver el Documentación de Java para más información.


3554
2018-04-07 18:29



Por ejemplo, aquí hay dos formas:

Integer x = Integer.valueOf(str);
// or
int y = Integer.parseInt(str);

Hay una pequeña diferencia entre estos métodos:

  • valueOf devuelve una instancia nueva o almacenada en caché java.lang.Integer
  • parseInt devuelve primitivo int.

Lo mismo es para todos los casos: Short.valueOf/parseShort, Long.valueOf/parseLong, etc.


588
2018-04-07 18:36



Bueno, un punto muy importante a considerar es que el analizador Integer arroja NumberFormatException como se establece en Javadoc.

int foo;
String StringThatCouldBeANumberOrNot = "26263Hello"; //will throw exception
String StringThatCouldBeANumberOrNot2 = "26263"; //will not throw exception
try {
      foo = Integer.parseInt(StringThatCouldBeANumberOrNot);
} catch (NumberFormatException e) {
      //Will Throw exception!
      //do something! anything to handle the exception.
}

try {
      foo = Integer.parseInt(StringThatCouldBeANumberOrNot2);
} catch (NumberFormatException e) {
      //No problem this time, but still it is good practice to care about exceptions.
      //Never trust user input :)
      //Do something! Anything to handle the exception.
}

Es importante manejar esta excepción cuando intente obtener valores enteros a partir de argumentos divididos o analizar dinámicamente algo.


215
2018-04-30 06:54



Hágalo manualmente:

public static int strToInt( String str ){
    int i = 0;
    int num = 0;
    boolean isNeg = false;

    //Check for negative sign; if it's there, set the isNeg flag
    if (str.charAt(0) == '-') {
        isNeg = true;
        i = 1;
    }

    //Process each character of the string;
    while( i < str.length()) {
        num *= 10;
        num += str.charAt(i++) - '0'; //Minus the ASCII code of '0' to get the value of the charAt(i++).
    }

    if (isNeg)
        num = -num;
    return num;
}

72
2017-09-11 02:08



Actualmente estoy haciendo una tarea para la universidad, donde no puedo usar ciertas expresiones, como las de arriba, y al mirar la tabla ASCII, logré hacerlo. Es un código mucho más complejo, pero podría ayudar a otros que están restringidos como yo.

Lo primero que debe hacer es recibir la entrada, en este caso, una cadena de dígitos; Lo llamaré String number, y en este caso, lo ejemplificaré usando el número 12, por lo tanto String number = "12";

Otra limitación era el hecho de que no podía usar ciclos repetitivos, por lo tanto, una for el ciclo (que hubiera sido perfecto) tampoco se puede usar. Esto nos limita un poco, pero de nuevo, ese es el objetivo. Como solo necesitaba dos dígitos (tomando los dos últimos dígitos), un simple charAtresuelto:

 // Obtaining the integer values of the char 1 and 2 in ASCII
 int semilastdigitASCII = number.charAt(number.length()-2);
 int lastdigitASCII = number.charAt(number.length()-1);

Teniendo los códigos, solo tenemos que mirar la mesa y hacer los ajustes necesarios:

 double semilastdigit = semilastdigitASCII - 48;  //A quick look, and -48 is the key
 double lastdigit = lastdigitASCII - 48;

Ahora, ¿por qué doble? Bueno, debido a un paso realmente "extraño". Actualmente tenemos dos dobles, 1 y 2, pero tenemos que convertirlo en 12, no hay ninguna operación matemática que podamos hacer.

Estamos dividiendo el último (último dígito) por 10 en la moda 2/10 = 0.2 (por lo tanto, ¿por qué?) así:

 lastdigit = lastdigit/10;

Esto es meramente jugar con números. Estábamos convirtiendo el último dígito en un decimal. Pero ahora, mira lo que sucede:

 double jointdigits = semilastdigit + lastdigit; // 1.0 + 0.2 = 1.2

Sin entrar demasiado en las matemáticas, simplemente estamos aislando las unidades de los dígitos de un número. Usted ve, ya que solo consideramos 0-9, dividir por un múltiplo de 10 es como crear un "cuadro" donde lo almacena (piense en cuando su maestro de primer grado le explicó qué era una unidad y cien). Asi que:

 int finalnumber = (int) (jointdigits*10); // Be sure to use parentheses "()"

Y ahí tienes. Has convertido una Cadena de dígitos (en este caso, dos dígitos) en un número entero compuesto por esos dos dígitos, teniendo en cuenta las siguientes limitaciones:

  • Sin ciclos repetitivos
  • No hay expresiones "mágicas" como parseInt

38
2018-03-20 23:51



Una solución alternativa es usar Apache Commons ' NumberUtils:

int num = NumberUtils.toInt("1234");

La utilidad Apache es agradable porque si la cadena es un formato de número no válido, entonces 0 siempre se devuelve. De ahí que te guarde el bloque try catch.

API de Apache NumberUtils versión 3.4


33
2017-08-27 12:07



Integer.decode

También puedes usar public static Integer decode(String nm) throws NumberFormatException.

También funciona para la base 8 y 16:

// base 10
Integer.parseInt("12");     // 12 - int
Integer.valueOf("12");      // 12 - Integer
Integer.decode("12");       // 12 - Integer
// base 8
// 10 (0,1,...,7,10,11,12)
Integer.parseInt("12", 8);  // 10 - int
Integer.valueOf("12", 8);   // 10 - Integer
Integer.decode("012");      // 10 - Integer
// base 16
// 18 (0,1,...,F,10,11,12)
Integer.parseInt("12",16);  // 18 - int
Integer.valueOf("12",16);   // 18 - Integer
Integer.decode("#12");      // 18 - Integer
Integer.decode("0x12");     // 18 - Integer
Integer.decode("0X12");     // 18 - Integer
// base 2
Integer.parseInt("11",2);   // 3 - int
Integer.valueOf("11",2);    // 3 - Integer

Si quieres obtener int en lugar de Integer puedes usar:

  1. Unboxing:

    int val = Integer.decode("12"); 
    
  2. intValue():

    Integer.decode("12").intValue();
    

27
2018-03-07 00:42