📋 目录
- 一、工具类功能
- 二、所需环境
- 三、方法与调用示例(按需调用)
- 四、工具类源码(可直接复制)
一、工具类功能
把外部传进来的字符串按目标类型转成Integer、Boolean、Date、枚举等对象,转不过去统一给null,调用方不用包 try-catch。
二、所需环境
JDK 17或以上
三、方法与调用示例(按需调用)
🔢方法序号:1
🎯方法用途:
- 把外部传来的字符串转成你指定的类型(
Integer、Boolean、Date、枚举等) - 转不了统一给
null而不是抛异常,省掉成片的判空和 try-catch
🧩方法定义:public static <T> T parse(String input, String pattern, Class<T> targetType)
🗣️入参解释:public static <T> T parse(原始字符串, 日期格式, 目标类型)
📤返回值解释:T,与传入的目标类型同一个类型
💡边界口径:
- 能转就返回目标类型对象
- 转不了统一返回
null,不抛异常 - 转不了分三种:① 入参为空;② 类型不支持,如
BigDecimal;③ 写法不合法,如42abc转Integer
🧪方法示例:
parse(" hello ", null, String.class)拿到hello,先去掉首尾空格再返回parse(" 42 ", null, Integer.class)拿到42parse("42", null, int.class)拿到42,基本类型int.class同样支持parse("99999999999", null, Long.class)拿到99999999999parse("1.5", null, Double.class)拿到1.5parse("1.5", null, Float.class)拿到1.5parse("300", null, Short.class)拿到300parse("7", null, Byte.class)拿到7parse("TRUE", null, Boolean.class)拿到true,只认true/false字面量、忽略大小写parse("A", null, Character.class)拿到Aparse("paid", null, OrderStatus.class)拿到PAID,枚举按常量名忽略大小写匹配parse("2024-01-15 10:30:00", null, Date.class)拿到Mon Jan 15 10:30:00 CST 2024parse("42abc", null, Integer.class)拿到null,数字串写法不合法parse("yes", null, Boolean.class)拿到null,不是true/false字面量parse("ab", null, Character.class)拿到null,多于一个字符parse("42", null, BigDecimal.class)拿到null,本类不支持该目标类型
🔢方法序号:2
🎯方法用途:
- 把文本时间转成
Date,带不带分隔符、有没有秒、中文年月日这些常见写法都认 - 不用自己列格式表挨个试
🧩方法定义:public static Date parseDate(String input)
🗣️入参解释:public static Date parseDate(日期字符串)
📤返回值解释:Date
💡边界口径:
- 命中 14 种内置格式之一就返回
Date - 一种都不命中返回
null,不抛异常 - 解析按 STRICT 走,
2024-02-30这种不存在的日期算不命中,不会被夹成当月最后一天
🧪方法示例:
parseDate("2024-01-15 10:30:00")拿到Mon Jan 15 10:30:00 CST 2024parseDate("2024-01-15 10:30")拿到同一个值,只给到分也能解parseDate("2024-01-15 10:30:00.123")拿到同一个值,123 毫秒仍在Date里,只是toString不显示parseDate("2024-01-15T10:30:00")拿到Mon Jan 15 10:30:00 CST 2024parseDate("2024-01-15T10:30:00.123")拿到同一个值parseDate("2024-01-15T10:30")拿到同一个值parseDate("2024-01-15")拿到Mon Jan 15 00:00:00 CST 2024,只给日期按系统时区当天零点还原parseDate("2024/01/15 10:30:00")拿到Mon Jan 15 10:30:00 CST 2024parseDate("2024/01/15 10:30")拿到Mon Jan 15 10:30:00 CST 2024parseDate("2024/01/15")拿到Mon Jan 15 00:00:00 CST 2024parseDate("15/01/2024 10:30:00")拿到Mon Jan 15 10:30:00 CST 2024,日在前的英式写法parseDate("15/01/2024")拿到Mon Jan 15 00:00:00 CST 2024parseDate("2024年01月15日 10:30:00")拿到Mon Jan 15 10:30:00 CST 2024,中文年月日写法parseDate("2024年01月15日")拿到Mon Jan 15 00:00:00 CST 2024parseDate("2024-02-30")拿到null,STRICT 下这是不存在的日期,算解析失败parseDate(null)拿到null,不抛异常parseDate(" ")拿到null,全空白同样算失败
🔢方法序号:3
🎯方法用途:
- 对方有固定格式时,按你给的格式转
Date - 这个格式解不出来还会回退常见写法,不会因为写死一个格式就把正常日期判成解析失败
🧩方法定义:public static Date parseDate(String input, String pattern)
🗣️入参解释:public static Date parseDate(日期字符串, 指定日期格式)
📤返回值解释:Date
💡边界口径:
- 指定格式命中就返回
Date - 指定格式不命中、或格式本身写错,再逐个回退内置的 14 种格式,不会因为写死一个格式就挡掉其它常见写法
- 全落空返回
null,不抛异常
🧪方法示例:
parseDate("2024/01/15 06:00:00", "yyyy/MM/dd HH:mm:ss")拿到Mon Jan 15 06:00:00 CST 2024,指定格式命中parseDate("2024年01月15日", "yyyy年MM月dd日")拿到Mon Jan 15 00:00:00 CST 2024,中文格式按指定写法命中parseDate("2024-January-15", "yyyy-MMMM-dd")拿到Mon Jan 15 00:00:00 CST 2024,英文月份全名走MMMMparseDate("2024-01-15", "yyyy年MM月dd日")拿到Mon Jan 15 00:00:00 CST 2024,指定格式没命中、回退内置命中parseDate("2024-01-15", null)拿到Mon Jan 15 00:00:00 CST 2024,格式给null直接按内置 14 种解析parseDate("2024-01-15", "yyyy年MM")拿到Mon Jan 15 00:00:00 CST 2024,格式本身写错也当作没指定parseDate("2024-02-30", "yyyy年MM月dd日")拿到null,指定格式与内置都救不了不存在的日期
🔢方法序号:4
🎯方法用途:
- 在真转之前先判断这个字符串能不能转成目标类型
- 批量导入时用它决定某条数据能不能收,不用转一半才发现不对
🧩方法定义:public static boolean isConvertible(String input, Class<?> targetType)
🗣️入参解释:public static boolean isConvertible(原始字符串, 目标类型)
📤返回值解释:boolean
💡边界口径:
- 能转返回
true - 入参为空或转不了返回
false,不抛异常 - 只有一种例外:目标类型传
null时抛NullPointerException,那是调用方写错了,不该伪装成false
🧪方法示例:
isConvertible(" 42 ", Integer.class)拿到trueisConvertible("TRUE", Boolean.class)拿到trueisConvertible("A", Character.class)拿到trueisConvertible("SHIPPED", OrderStatus.class)拿到trueisConvertible("2024-01-15", Date.class)拿到trueisConvertible("yes", Boolean.class)拿到false,不是true/false字面量isConvertible("ab", Character.class)拿到false,多于一个字符isConvertible("RUNNING", OrderStatus.class)拿到false,没有这个常量名isConvertible("2024-02-30", Date.class)拿到false,内置格式里没有这个日期isConvertible("42", BigDecimal.class)拿到false,不支持的目标类型不算能转isConvertible(null, Date.class)拿到false,入参为空不抛异常isConvertible("42", null)抛NullPointerException: targetType 不能为 null
四、工具类源码(可直接复制)
📦领取方式: 关注点赞收藏,私信回复「java工具类」可领取100个工具类「Java企业级工具类全家桶(1-100)」的完整源码。
💡 工具类已调试通过,复制粘贴即可使用,省时省力
💡 可保存到自己网盘,永久有效
觉得对您有帮助,麻烦点点关注啦,您的关注是我创作的最大动力~ 🎯