fork download
  1. import java.util.HashMap;
  2. import java.util.function.Function;
  3. import java.math.*;
  4. import java.time.*;
  5.  
  6. class Ideone {
  7.  
  8. @SuppressWarnings({ "rawtypes", "unchecked" })
  9. private static Object parse(String argString, Class param) {
  10. Function<String,?> func = parser.get(param);
  11. if (func != null)
  12. return func.apply(argString);
  13. if (param.isEnum())
  14. return Enum.valueOf(param, argString);
  15. throw new UnsupportedOperationException("Cannot parse string to " + param.getName());
  16. }
  17.  
  18. private static HashMap<Class<?>, Function<String,?>> parser = new HashMap<>();
  19. static {
  20. parser.put(boolean.class , Boolean::parseBoolean);
  21. parser.put(byte.class , Byte::parseByte);
  22. parser.put(short.class , Short::parseShort);
  23. parser.put(int.class , Integer::parseInt);
  24. parser.put(long.class , Long::parseLong);
  25. parser.put(double.class , Double::parseDouble);
  26. parser.put(float.class , Float::parseFloat);
  27. parser.put(Boolean.class , Boolean::valueOf);
  28. parser.put(Byte.class , Byte::valueOf);
  29. parser.put(Short.class , Short::valueOf);
  30. parser.put(Integer.class , Integer::valueOf);
  31. parser.put(Long.class , Long::valueOf);
  32. parser.put(Double.class , Double::valueOf);
  33. parser.put(Float.class , Float::valueOf);
  34. parser.put(String.class , String::valueOf);
  35. parser.put(BigDecimal.class , BigDecimal::new);
  36. parser.put(BigInteger.class , BigInteger::new);
  37. parser.put(LocalDate.class , LocalDate::parse);
  38. parser.put(LocalDateTime.class , LocalDateTime::parse);
  39. parser.put(LocalTime.class , LocalTime::parse);
  40. parser.put(MonthDay.class , MonthDay::parse);
  41. parser.put(OffsetDateTime.class, OffsetDateTime::parse);
  42. parser.put(OffsetTime.class , OffsetTime::parse);
  43. parser.put(Year.class , Year::parse);
  44. parser.put(YearMonth.class , YearMonth::parse);
  45. parser.put(ZonedDateTime.class , ZonedDateTime::parse);
  46. parser.put(ZoneId.class , ZoneId::of);
  47. parser.put(ZoneOffset.class , ZoneOffset::of);
  48. }
  49.  
  50. public static void main(String[] args) {
  51. test("true", boolean.class);
  52. test("123" , byte.class);
  53. test("123" , short.class);
  54. test("123" , int.class);
  55. test("123" , long.class);
  56. test("123" , double.class);
  57. test("123" , float.class);
  58. test("true", Boolean.class);
  59. test("123" , Byte.class);
  60. test("123" , Short.class);
  61. test("123" , Integer.class);
  62. test("123" , Long.class);
  63. test("123" , Double.class);
  64. test("123" , Float.class);
  65. test("123" , BigDecimal.class);
  66. test("123" , BigInteger.class);
  67. test("Hello World", String.class); // String
  68. test("HALF_EVEN" , RoundingMode.class); // enum
  69. test("2016" , Year.class);
  70. test("2016-04" , YearMonth.class);
  71. test("--04-01" , MonthDay.class);
  72. test("2016-04-01" , LocalDate.class);
  73. test("23:18:47" , LocalTime.class);
  74. test("23:18:47-04:00" , OffsetTime.class);
  75. test("2016-04-01T23:18:47" , LocalDateTime.class);
  76. test("2016-04-01T23:18:47-04:00" , OffsetDateTime.class);
  77. test("2016-04-01T23:18:47-04:00[America/New_York]", ZonedDateTime.class);
  78. test("America/New_York" , ZoneId.class);
  79. test("-04:00" , ZoneOffset.class);
  80. test("FRIDAY" , DayOfWeek.class); // enum
  81. test("APRIL" , Month.class); // enum
  82. }
  83.  
  84. private static void test(String argString, Class<?> param) {
  85. Object ret = parse(argString, param);
  86. System.out.printf("%-21s -> %-19s [%-22s -> %s]%n",
  87. '"' + argString + '"', ret, param.getName(), ret.getClass().getName());
  88. }
  89.  
  90. }
Success #stdin #stdout 0.37s 321408KB
stdin
Standard input is empty
stdout
"true"                -> true                  [boolean                -> java.lang.Boolean]
"123"                 -> 123                   [byte                   -> java.lang.Byte]
"123"                 -> 123                   [short                  -> java.lang.Short]
"123"                 -> 123                   [int                    -> java.lang.Integer]
"123"                 -> 123                   [long                   -> java.lang.Long]
"123"                 -> 123.0                 [double                 -> java.lang.Double]
"123"                 -> 123.0                 [float                  -> java.lang.Float]
"true"                -> true                  [java.lang.Boolean      -> java.lang.Boolean]
"123"                 -> 123                   [java.lang.Byte         -> java.lang.Byte]
"123"                 -> 123                   [java.lang.Short        -> java.lang.Short]
"123"                 -> 123                   [java.lang.Integer      -> java.lang.Integer]
"123"                 -> 123                   [java.lang.Long         -> java.lang.Long]
"123"                 -> 123.0                 [java.lang.Double       -> java.lang.Double]
"123"                 -> 123.0                 [java.lang.Float        -> java.lang.Float]
"123"                 -> 123                   [java.math.BigDecimal   -> java.math.BigDecimal]
"123"                 -> 123                   [java.math.BigInteger   -> java.math.BigInteger]
"Hello World"         -> Hello World           [java.lang.String       -> java.lang.String]
"HALF_EVEN"           -> HALF_EVEN             [java.math.RoundingMode -> java.math.RoundingMode]
"2016"                -> 2016                  [java.time.Year         -> java.time.Year]
"2016-04"             -> 2016-04               [java.time.YearMonth    -> java.time.YearMonth]
"--04-01"             -> --04-01               [java.time.MonthDay     -> java.time.MonthDay]
"2016-04-01"          -> 2016-04-01            [java.time.LocalDate    -> java.time.LocalDate]
"23:18:47"            -> 23:18:47              [java.time.LocalTime    -> java.time.LocalTime]
"23:18:47-04:00"      -> 23:18:47-04:00        [java.time.OffsetTime   -> java.time.OffsetTime]
"2016-04-01T23:18:47" -> 2016-04-01T23:18:47   [java.time.LocalDateTime -> java.time.LocalDateTime]
"2016-04-01T23:18:47-04:00" -> 2016-04-01T23:18:47-04:00   [java.time.OffsetDateTime -> java.time.OffsetDateTime]
"2016-04-01T23:18:47-04:00[America/New_York]" -> 2016-04-01T23:18:47-04:00[America/New_York]   [java.time.ZonedDateTime -> java.time.ZonedDateTime]
"America/New_York"    -> America/New_York      [java.time.ZoneId       -> java.time.ZoneRegion]
"-04:00"              -> -04:00                [java.time.ZoneOffset   -> java.time.ZoneOffset]
"FRIDAY"              -> FRIDAY                [java.time.DayOfWeek    -> java.time.DayOfWeek]
"APRIL"               -> APRIL                 [java.time.Month        -> java.time.Month]