7

Webベースのアプリケーションを作成していますが、値が文字列として格納されるテキストフィールドがあります。問題は、一部のテキストフィールドがintに解析され、intよりもはるかに大きな数を文字列に格納できることです。私の質問は、文字列番号をエラーなしで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

文字列を通常の Integer ではなく BigInteger に解析します。これは、はるかに高い値を保持できます。

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ブロック内の文字列を解析するため、例外またはエラーが発生した場合、文字列から 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

String が数値でない場合、2 番目の数値がデフォルトになります。最初のパラメーターは、変換しようとしている文字列です。

多数の場合、次のようにします

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 に答える