Kotlin中如何从Period.between()返回的字符串提取信息?
提取Period字符串中年、月、日值的通用方案
最优方案:直接用Period API(无需处理字符串)
完全没必要手动拆分返回的字符串,Period类本身就封装了直接获取年、月、日的方法,这是最靠谱高效的方式:
val period = Period.between(date1, date2) val years = period.years val months = period.months val days = period.days
不管日期间隔是否包含年/月/日,这些方法都会返回对应数值,没有的部分直接返回0,完美适配所有场景。
若必须处理字符串的情况(比如仅拿到字符串结果)
如果因特殊原因只能操作返回的字符串,用正则表达式可以完美适配所有格式:
val periodStr = "P2Y3M5D" // 支持"P3M5D"、"P5D"、"P2Y"、"P1Y2D"等所有组合 val regex = Regex("P(?:(\\d+)Y)?(?:(\\d+)M)?(?:(\\d+)D)?") val matchResult = regex.find(periodStr) val years = matchResult?.groups?.get(1)?.value?.toInt() ?: 0 val months = matchResult?.groups?.get(2)?.value?.toInt() ?: 0 val days = matchResult?.groups?.get(3)?.value?.toInt() ?: 0
正则说明:
P:匹配字符串开头的固定标识(?:(\d+)Y)?:可选非捕获组,匹配数字加Y的组合,其中(\d+)是捕获组,用于提取年份数字;?表示该部分可缺失(?:(\d+)M)?:同理匹配月份部分,可选(?:(\d+)D)?:同理匹配日期部分,可选
无论哪一部分缺失,都能正确提取对应数值,缺失的部分会被赋值为0。
内容的提问来源于stack exchange,提问作者berry
相关产品推荐
相关产品推荐

