我正在创建一个基于Web的应用程序,我有文本字段,其中值存储为字符串。问题是某些文本字段要解析为整数,你可以在字符串中存储比在int中更大的数字。我的问题是,确保将String编号解析为int而不会出错的最佳方法是什么。
答案 0 :(得分:11)
您可以使用try / catch结构。
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 */
}
答案 1 :(得分:5)
Integer.parseInt方法检查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
所以正确的方法是尝试解析字符串:
try {
Integer.parseInt(str);
} catch (NumberFormatException e) {
// not an int
}
答案 2 :(得分:3)
将字符串解析为BigInteger而不是常规的Integer。这可以保持更高的值。
BigInteger theInteger = new BigInteger(stringToBeParsed);
答案 3 :(得分:0)
您可以检查代码:
答案 4 :(得分:0)
始终解析try catch
块中的字符串,这样如果发生任何异常或错误,您就会知道String解析中存在一些错误。
答案 5 :(得分:0)
您可以使用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
如果String不是数值,则第二个数字是默认值。第一个参数是您尝试转换的String。
对于大数字,我会做以下
BigInteger val = null;
try {
val = new BigInteger( "1" );
} catch ( NumberFormatException e ) {
val = BigInteger.ZERO;
}
答案 6 :(得分:0)
BigInteger bigInt = BigInteger(numberAsString);
boolean fitsInInt = ( bigInt.compareTo( BigInteger.valueOf(bigInt.intValue()) ) == 0;