7

我正在制作一个基于 Web 的应用程序,并且我有文本字段,其中值存储为字符串。问题是某些文本字段将被解析为整数,并且您可以在字符串中存储比在整数中更大的数字。我的问题是,确保可以将 String 编号解析为 int 而不会出错的最佳方法是什么。

4

7 回答 7

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 */
}
于 2012-06-19T14:21:44.210 回答
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
}
于 2012-06-19T14:26:12.617 回答
3

将字符串解析为 BigInteger 而不是常规 Integer。这可以保持更高的值。

BigInteger theInteger = new BigInteger(stringToBeParsed);
于 2012-06-19T14:28:23.863 回答
0

您可以检查您的代码:

  • 将 String 转换为 long。
  • 将 long 与整数(Integer 类中的常量)的最大值进行比较。
  • 如果 long 大于它,你就知道它不能被解析成 int 而不溢出。
  • 如果它小于或等于它,请将您的 long 转换为 int。
于 2012-06-19T14:21:57.477 回答
0

始终在try catch块中解析字符串,因此如果发生任何异常或错误,您就会知道 String 中存在一些错误以进行 int 解析。

于 2012-06-19T14:22:18.117 回答
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

如果字符串不是数值,则第二个数字是默认值。第一个参数是您要转换的字符串。

对于大量我会做以下

BigInteger val = null;
try {
  val = new BigInteger( "1" );
} catch ( NumberFormatException e ) {
  val = BigInteger.ZERO;
}
于 2012-06-19T14:29:40.067 回答
0

那这个呢 ?

BigInteger bigInt = BigInteger(numberAsString);
boolean fitsInInt = ( bigInt.compareTo( BigInteger.valueOf(bigInt.intValue()) ) == 0;
于 2012-06-19T14:30:12.987 回答