一个想法是试图返回try-catch中的每个类型。
代码:(错误检查可以小于理想的)
public static void main(String[] args)
{
System.out.println(getPrimitive("123")); // Byte
System.out.println(getPrimitive("1233")); // Short
System.out.println(getPrimitive("1233587")); // Integer
System.out.println(getPrimitive("123.2")); // Float
System.out.println(getPrimitive("123.999999")); // Double
System.out.println(getPrimitive("12399999999999999999999999")); // BigInteger
System.out.println(getPrimitive("123.999999999999999999999999")); // BigDecimal
}
static public Object getPrimitive(String string)
{
try { return Byte.valueOf(string); } catch (Exception e) { };
try { return Short.valueOf(string); } catch (Exception e) { };
try { return Integer.valueOf(string); } catch (Exception e) { };
try { return new BigInteger(string); } catch (Exception e) { };
try { if (string.matches(".{1,8}"))
return Float.valueOf(string); } catch (Exception e) { };
try { if (string.matches(".{1,17}"))
return Double.valueOf(string); } catch (Exception e) { };
try { return new BigDecimal(string); } catch (Exception e) { };
// more stuff ?
return null;
}
后面.{1,8}
和.{1,17}
的原因是float
和double
精确到约7和16位的每个(根据某些随机源)。 .
是一张通配符。意味着在x和y次之间重复。
编辑:
改进分化float
,double
和BigDecimal
与除其他事项外一个基本的正则表达式。
不,没有优雅的方式。 – 2013-03-22 11:56:52
你需要支持哪些基本类型? – NPE 2013-03-22 11:58:01
用什么方法可以区分整数的字符串表示与BigInteger的表示(只要该值介于MAX_INT和MIN_INT之间)? – Erik 2013-03-22 12:03:11