一個想法是試圖返回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