3


私はプリミティブの文字列表現を持っており、私の目標はそれがどのプリミティブであるかを判断することです。
私の機能は次のとおりです。

public Object getPrimitive(String primitiveAsString) {
.....
}

たとえば、入力が「223」の場合は整数を返しますが、入力が「223.1」または「223.0」(!!)の場合は倍精度を返します。さらに、float と double の間、さらには integer と "BigInteger" の間を分離したいと考えています。

NumberFormat を使用して解決策を試しましたが、うまくいきませんでした....

エレガントな方法はありますか?

ありがとう!

4

3 に答える 3

0

私はこのようなことをします...これは BigInteger と BigDecimal でも機能するはずです...ただし、テストしていません。

public Object getPrimitive(String primitiveAsString) {
    String value = primitiveAsString;

    try {
      return Byte.valueOf(value);
    } catch (NumberFormatException ex) { }

    try {
      return Short.valueOf(value);
    } catch (NumberFormatException ex) { }

    try {
      return Integer.valueOf(value);
    } catch (NumberFormatException ex) { }

    try {
      return Float.valueOf(value);
    } catch (NumberFormatException ex) { }

    try {
      return Double.valueOf(value);
    } catch (NumberFormatException ex) { }

    try {
      return Long.valueOf(value);
    } catch (NumberFormatException ex) { }

    try {
      return new BigInteger(value);
    } catch (NumberFormatException ex) { }

    try {
      return new BigDecimal(value);
    } catch (NumberFormatException ex) { }

    if(value.length() == 1) {
      return new Character(value.charAt(0));
    }

    return null;
}

編集: 入力が BigInteger/BigDecimal の場合に対応するようにソリューションを改善しました。このソリューションは正規表現を使用しません。

于 2013-03-22T12:15:59.680 に答える