아이디어는 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}
은 x와 y 사이에서 반복된다는 것을 의미합니다.
편집 : 무엇보다도 기본 정규식 float
, double
및 BigDecimal
차별화를 개선
.
아니요, 그것에 대해 우아한 방법이 없습니다. –
어떤 기본 유형을 지원해야합니까? – NPE
어떤 식 으로든 정수의 문자열 표현과 BigInteger의 표현을 구별 할 수 있습니까 (값이 MAX_INT & MIN_INT 사이에있는 한)? – Erik