Estoy haciendo una aplicación basada en web y tengo campos de texto donde los valores se almacenan como cadenas. El problema es que algunos de los campos de texto se deben analizar en entradas y se pueden almacenar números mucho mayores en cadenas que en una int. Mi pregunta es, ¿cuál es la mejor manera de asegurarse de que el número String se pueda analizar en un int sin errores de salida?¿Cuál es la mejor manera de asegurarse de que una cadena se pueda almacenar como int en java
Respuesta
Puede usar una estructura de prueba/captura para eso.
try {
Integer.parseInt(yourString);
//new BigInteger(yourString);
//Use the above if parsing amounts beyond the range of an Integer.
} catch (NumberFormatException e) {
/* Fix the problem */
}
muchas gracias por su ayuda. eso hizo el truco. – user1423793
Se puede ejecutar una comprobación en el código:
- convertir la cadena en un largo.
- Compara el largo contra el valor máximo para un entero (una constante dentro de la clase Entero)
- Si el largo es mayor que este, se sabe que no se puede analizar en un int sin desbordamiento.
- Si es menor o igual que él, conviértalo en int.
¿Por qué no simplemente convertirlo directamente en un int? – luketorjussen
Porque soy tonto, claro. (¿No es probable que un int se desborde a un valor negativo, o falle? Necesitaría un bloque try/catch, que sin duda es la mejor respuesta.) – BlackVegetable
Siempre analice la cadena en el bloque try catch
, por lo que si se produce alguna excepción o error, sabrá que hay algún error en el análisis String to int.
El método Integer.parseInt comprueba el rango que está explicitada por el javadoc:
An exception of type NumberFormatException is thrown if any of the following situations occurs:
The first argument is null or is a string of length zero.
The radix is either smaller than Character.MIN_RADIX or larger than Character.MAX_RADIX.
Any character of the string is not a digit of the specified radix, except that the first character may be a minus sign '-' ('\u002D') provided that the string is longer than length 1.
The value represented by the string is not a value of type int.
Examples:
parseInt("0", 10) returns 0
parseInt("473", 10) returns 473
parseInt("-0", 10) returns 0
parseInt("-FF", 16) returns -255
parseInt("1100110", 2) returns 102
parseInt("2147483647", 10) returns 2147483647
parseInt("-2147483648", 10) returns -2147483648
parseInt("2147483648", 10) throws a NumberFormatException
parseInt("99", 8) throws a NumberFormatException
parseInt("Kona", 10) throws a NumberFormatException
parseInt("Kona", 27) returns 411787
Así que la forma correcta es tratar de analizar la cadena:
try {
Integer.parseInt(str);
} catch (NumberFormatException e) {
// not an int
}
gracias. que funcionó – user1423793
analizar la cadena a un BigInteger en lugar de un entero normal Esto puede contener valores mucho más altos.
BigInteger theInteger = new BigInteger(stringToBeParsed);
Sin embargo, eso no parece responder la pregunta. –
+1 Creo que esto es lo que el OP está buscando. –
@dystroy. En realidad, creo que sí. La forma en que leo la pregunta es que él quiere que el usuario pueda ingresar cualquier número, pero no desea que el programa se cuelgue debido a que el número es grande –
Puede usar Apache Commons Lang.
import org.apache.commons.lang.math.NumberUtils;
NumberUtils.toInt("", 10); // returns 10
NumberUtils.toInt(null, 10); // returns 10
NumberUtils.toInt("1", 0); // returns 1
El segundo número es el predeterminado si la cadena no es un valor numérico. El primer parámetro es la cadena que está intentando convertir.
Para un gran número me gustaría hacer la siguiente
BigInteger val = null;
try {
val = new BigInteger("1");
} catch (NumberFormatException e) {
val = BigInteger.ZERO;
}
También podría usar Long? – mrswadge
qué pasa con esto?
BigInteger bigInt = BigInteger(numberAsString);
boolean fitsInInt = (bigInt.compareTo(BigInteger.valueOf(bigInt.intValue())) == 0;
- 1. ¿Cuál es la mejor manera de almacenar datos de tendencia?
- 2. ¿Cuál es la mejor manera de almacenar datos como 'Favoritos' en una aplicación de Android?
- 3. ¿Cuál es la mejor manera de asegurarse de que solo se esté ejecutando una instancia de un programa Perl?
- 4. ¿Cuál es la mejor manera de almacenar cadena de conexión en DLL de .NET?
- 5. ¿Cuál es la mejor manera de almacenar valores de fecha en formato de cadena?
- 6. ¿Cuál es la mejor manera de verificar si una cadena contiene una URL en Java/Android?
- 7. ¿Cuál es la mejor manera de exponer un servicio WCF para que se pueda consumir fácilmente desde Java/CXF?
- 8. ¿Cuál es la mejor manera de comparar Double e Int?
- 9. hilo de Java que es mejor manera?
- 10. ¿Cuál es la mejor manera de iterar sobre las líneas de una cadena de Java?
- 11. ¿Cuál es la mejor manera de dividir una cadena por un delimitador de manera funcional?
- 12. Cuál es la mejor manera de almacenar datos estáticos en C# que nunca cambiará
- 13. ¿Cuál es la mejor manera de almacenar información de la versión de Subversion en EAR?
- 14. ¿Cuál es la mejor manera de convertir Cadena a ByteString
- 15. ¿Cuál es la mejor forma de convertir ByteString en Int?
- 16. ¿Cuál es la mejor manera de almacenar información de zona horaria en mi base de datos?
- 17. ¿Cuál es la mejor manera de almacenar archivos multimedia en una base de datos?
- 18. ¿Cuál es la mejor manera de almacenar la configuración específica de la aplicación en los rieles?
- 19. La mejor manera de almacenar valores enum en la base de datos - String o Int
- 20. ¿Es posible que Java String.split pueda devolver una Cadena nula []
- 21. ¿Cuál es la mejor manera de almacenar una contraseña o clave privada en un host web?
- 22. ¿Cuál es el origen de pedir a los entrevistados que analicen manualmente una cadena como int?
- 23. ¿Es esta la mejor manera en C# para convertir una cadena delimitada en una matriz int?
- 24. En Java, ¿cuál es la mejor manera de seguir llamando a una función hasta que no se produzca ninguna excepción?
- 25. ¿Cuál es la mejor manera de almacenar datos históricos en SQL Server 2005/2008?
- 26. ¿Cuál es la mejor manera de eliminar acentos en una cadena unicode de Python?
- 27. Cuál es la mejor manera de almacenar la duración en MySQL
- 28. ¿Cuál es la mejor manera de incrementar una enumeración?
- 29. ¿Cuál es una mejor manera de verificar si una cadena es un número entero en iPhone?
- 30. La mejor manera de probar excepciones con Assert para asegurarse de que se lanzarán
Valide la entrada mediante el análisis con 'Integer.parseInt (...)' en 'try/catch (NumberFormatException e)'. –
¿Qué tan grande es tu número? ¿Su número está fuera del rango de tipos disponibles en Java (Doble/Float)? – Santosh
@HovercraftFullOfEels No creo que el OP esté hablando de 'NumberFormatException'. Creo que se trata de la 'Cadena' cuando se convierte en un número (' Entero'), podría estar fuera de rango. –