¿Cómo puedo convertir un String
a 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 debería ser el número 1234
.
java
string
int
type-conversion
Usuario desconocido
fuente
fuente
Respuestas:
Si observa la documentación de Java , notará que la "captura" es que esta función puede arrojar una
NumberFormatException
, que por supuesto debe manejar:(Este tratamiento predetermina un número con formato incorrecto a
0
, pero puede hacer otra cosa si lo desea).Alternativamente, puede usar un
Ints
método de la biblioteca Guava, que en combinación con Java 8Optional
, es una forma poderosa y concisa de convertir una cadena en un int:fuente
int foo = NumberUtils.toInt(myString, 0);
Por ejemplo, aquí hay dos formas:
Hay una ligera diferencia entre estos métodos:
valueOf
devuelve una instancia nueva o en caché dejava.lang.Integer
parseInt
devuelve primitivaint
.Lo mismo es para todos los casos:
Short.valueOf
/parseShort
,Long.valueOf
/parseLong
, etc.fuente
valueOf
método es justoreturn valueOf(parseInt(string));
valueOf
llama recursivamente?valueOf(String)
se implementa analizando primero la cadena a un int usandoparseInt(String)
y luego envolviendo ese int en un entero usandovalueOf(int)
. Aquí no hay recursión porquevalueOf(String)
yvalueOf(int)
son dos funciones completamente diferentes, incluso si tienen el mismo nombre.Bueno, un punto muy importante a considerar es que el analizador Integer arroja NumberFormatException como se indica en Javadoc .
Es importante manejar esta excepción al intentar obtener valores enteros de argumentos divididos o analizar algo dinámicamente.
fuente
"([0-9]+)"
"capturará" la primera secuencia de uno o más dígitos del uno al nueve. Mira laMatcher
clase en ese paquete.Hazlo manualmente:
fuente
Integer.parseInt(s)
? - Veo el punto de que esta es una pregunta de entrevista, pero a) eso no implica que lo harías de esta manera (que es lo que preguntó el interlocutor), yb) esta respuesta es un mal ejemplo de todos modos.Integer.parseInt
porque no tiene validación.Una solución alternativa es usar NumberUtils de Apache Commons :
La utilidad Apache es buena porque si la cadena tiene un formato de número no válido, siempre se devuelve 0. Por lo tanto, le ahorra el bloque try catch.
Apache NumberUtils API Versión 3.4
fuente
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
, en este caso, lo ejemplificaré usando el número 12, por lo tantoString number = "12";
Otra limitación era el hecho de que no podía usar ciclos repetitivos, por lo tanto, un
for
ciclo (que hubiera sido perfecto) tampoco puede usarse. Esto nos limita un poco, pero de nuevo, ese es el objetivo. Como solo necesitaba dos dígitos (tomando los últimos dos dígitos), un simple locharAt
resolvió:Con los códigos, solo necesitamos mirar la tabla y hacer los ajustes necesarios:
Ahora, ¿por qué doble? Bueno, debido a un paso realmente "extraño". Actualmente tenemos dos dobles, 1 y 2, pero necesitamos convertirlo en 12, no hay ninguna operación matemática que podamos hacer.
Estamos dividiendo el último (último dígito) por 10 de la manera
2/10 = 0.2
(de ahí por qué doble) así:Esto es simplemente jugar con números. Estábamos convirtiendo el último dígito en un decimal. Pero ahora, mira lo que sucede:
Sin entrar demasiado en las matemáticas, simplemente estamos aislando las unidades de los dígitos de un número. Verá, dado que solo consideramos 0-9, dividir entre un múltiplo de 10 es como crear una "caja" donde la almacena (piense en cuándo su maestra de primer grado le explicó qué eran una unidad y cien). Entonces:
Y ahi tienes. Convirtió una Cadena de dígitos (en este caso, dos dígitos) en un número entero compuesto por esos dos dígitos, considerando las siguientes limitaciones:
fuente
'0'
para el personaje en lugar de48
y nunca tener que molestarse con su valor numérico real. En tercer lugar, todo el desvío condouble
valores no tiene ningún sentido ya que está dividiendo entre diez, solo para multiplicar por diez después. El resultado es simplementesemilastdigit * 10 + lastdigit
como se aprendió en la escuela primaria, cuando se introdujo el sistema decimal ...semilastdigit
ylastdigit
. ¿Cómo codificaría su solución para evitar "ciclos repetitivos" si le proporcionara una cadena numérica válida de longitud arbitraria (es decir, cualquier valor entre "-2147483648" y "2147483647"?)Integer.decode
También puedes usar
public static Integer decode(String nm) throws NumberFormatException
.También funciona para la base 8 y 16:
Si desea obtener en
int
lugar deInteger
puede usar:Unboxing:
intValue()
:fuente
Siempre que exista la más mínima posibilidad de que la Cadena dada no contenga un Entero, debe manejar este caso especial. Lamentablemente, los métodos estándar de Java
Integer::parseInt
yInteger::valueOf
arrojar unNumberFormatException
para señalar este caso especial. Por lo tanto, debe usar excepciones para el control de flujo, que generalmente se considera un estilo de codificación incorrecto.En mi opinión, este caso especial debe manejarse devolviendo un vacío
Optional<Integer>
. Como Java no ofrece dicho método, utilizo el siguiente contenedor:Ejemplo de uso:
Si bien esto todavía usa excepciones para el control de flujo internamente, el código de uso se vuelve muy limpio. Además, puede distinguir claramente el caso en que
-1
se analiza como un valor válido y el caso en que no se puede analizar una Cadena no válida.fuente
Convertir una cadena en un int es más complicado que simplemente convertir un número. Has pensado en los siguientes problemas:
fuente
Métodos para hacer eso:
Integer.valueOf produce el objeto Integer, todos los demás métodos: primitivo int.
Últimos 2 métodos de commons-lang3 y gran artículo sobre la conversión aquí .
fuente
Podemos usar el
parseInt(String str)
método deInteger
clase contenedora para convertir un valor de cadena en un valor entero.Por ejemplo:
La
Integer
clase también proporciona elvalueOf(String str)
método:También podemos utilizar
toInt(String strValue)
de NumberUtils clase de utilidad para la conversión:fuente
Uso
Integer.parseInt(yourString)
.Recuerda las siguientes cosas:
Integer.parseInt("1");
// OkayInteger.parseInt("-1");
// OkayInteger.parseInt("+1");
// OkayInteger.parseInt(" 1");
// Excepción (espacio en blanco)Integer.parseInt("2147483648");
// Excepción (el número entero está limitado a un valor máximo de 2,147,483,647)Integer.parseInt("1.1");
// Excepción ( . O , o lo que no esté permitido)Integer.parseInt("");
// Excepción (no 0 o algo)Solo hay un tipo de excepción:
NumberFormatException
fuente
Tengo una solución, pero no sé qué tan efectiva es. Pero funciona bien, y creo que podría mejorarlo. Por otro lado, hice un par de pruebas con JUnit que paso correctamente. Adjunté la función y las pruebas:
Prueba con JUnit:
fuente
(int) Double.parseDouble(input.replaceAll("[^0-9\\.\\-]", ""));
Google Guava tiene tryParse (String) , que devuelve
null
si la cadena no se puede analizar, por ejemplo:fuente
También puede comenzar eliminando todos los caracteres no numéricos y luego analizando el entero:
Pero tenga en cuenta que esto solo funciona para números no negativos.
fuente
-42
que se analice como42
."4+2"
, obtendré42
como resultado sin ninguna pista de que lo que intenté hacer fue equivocado. El usuario tendrá la impresión de que ingresar expresiones básicas como4+2
era una entrada válida, pero la aplicación continúa con un valor incorrecto. Además de eso, el tipo esString
, nostring
...Además de las respuestas anteriores, me gustaría agregar varias funciones. Estos son resultados mientras los usa:
Implementación:
fuente
Como se mencionó, Apache Commons '
NumberUtils
puede hacerlo. Vuelve0
si no puede convertir una cadena en un int.También puede definir su propio valor predeterminado:
Ejemplo:
fuente
También puede usar este código, con algunas precauciones.
Opción n. ° 1: Maneje la excepción explícitamente, por ejemplo, mostrando un diálogo de mensaje y luego detenga la ejecución del flujo de trabajo actual. Por ejemplo:
Opción n. ° 2: restablezca la variable afectada si el flujo de ejecución puede continuar en caso de una excepción. Por ejemplo, con algunas modificaciones en el bloque catch
Usar una constante de cadena para comparar o cualquier tipo de computación es siempre una buena idea, porque una constante nunca devuelve un valor nulo.
fuente
JOptionPane.showMessageDialog()
la respuesta a la pregunta vainilla de Java no tiene sentido.Integer.valueOf(String);
no devuelve tipoint
.Puedes usar
new Scanner("1244").nextInt()
. O pregunte si incluso existe un int:new Scanner("1244").hasNextInt()
fuente
En las competiciones de programación, donde tiene la seguridad de que el número siempre será un número entero válido, puede escribir su propio método para analizar la entrada. Esto omitirá todo el código relacionado con la validación (ya que no necesita nada de eso) y será un poco más eficiente.
Para entero positivo válido:
Para enteros positivos y negativos:
Si espera un espacio en blanco antes o después de estos números, asegúrese de hacerlo
str = str.trim()
antes de seguir procesando.fuente
Simplemente puedes probar esto:
Integer.parseInt(your_string);
para convertir unString
aint
Double.parseDouble(your_string);
para convertir unString
adouble
Ejemplo
fuente
Para una cadena normal puede usar:
Para un generador de cadenas y un búfer de cadenas puede usar:
fuente
Asegúrese de que no haya datos no numéricos en la cadena.
fuente
Estoy un poco sorprendido de que nadie haya mencionado el constructor Integer que toma String como parámetro.
Asi que aqui esta:
Java 8 - Entero (Cadena) .
Por supuesto, el constructor devolverá el tipo
Integer
, y una operación de unboxing convierte el valor aint
.Es importante mencionar : este constructor llama al
parseInt
método.fuente
Use Integer.parseInt () y colóquelo dentro de un
try...catch
bloque para manejar cualquier error en caso de que se ingrese un carácter no numérico, por ejemplo,fuente
Aquí vamos
fuente
Se puede hacer de siete maneras:
1) Usando
Ints.tryParse
:2) Usando
NumberUtils.createInteger
:3) Usando
NumberUtils.toInt
:4) Usando
Integer.valueOf
:5) Usando
Integer.parseInt
:6) Usando
Integer.decode
:7) Usando
Integer.parseUnsignedInt
:fuente
Un método es parseInt (String). Devuelve un int primitivo:
El segundo método es valueOf (String), y devuelve un nuevo objeto Integer ():
fuente
Puede usar cualquiera de los siguientes:
Integer.parseInt(s)
Integer.parseInt(s, radix)
Integer.parseInt(s, beginIndex, endIndex, radix)
Integer.parseUnsignedInt(s)
Integer.parseUnsignedInt(s, radix)
Integer.parseUnsignedInt(s, beginIndex, endIndex, radix)
Integer.valueOf(s)
Integer.valueOf(s, radix)
Integer.decode(s)
NumberUtils.toInt(s)
NumberUtils.toInt(s, defaultValue)
fuente
Este es un programa completo con todas las condiciones positivas y negativas sin usar una biblioteca
fuente
Integer.parseInt
.