让我们说例如我有字符串1y2m1w5d1h
,如何在几秒钟内将其转换为整数?
其中:
1y is 1 year
1m is 1 month
1w is 1 week
1d is 1 day
1h is 1 hour
但当然所有这些值都是可选的,并且可以更改。所以你可以1m2h
1个月和2个小时。
为简单起见,我们只说1个月是30天。
答案 0 :(得分:2)
用这样的正则表达式解析它:
(\d+)([A-Za-z]+)
然后访问组2以确定类型。使用组1作为乘数。并将所有内容汇总在一起。
请注意,解析这样的字符串实际上没有意义,因为月份和年份的长度不同,具体取决于一年中的特定时刻。
Here is a rough demo不考虑数月和数年的差异:
public static void main (String[] args) throws java.lang.Exception
{
Map<String, Long> times = new HashMap<String, Long>();
times.put("y", 365L*24*60*60); // Or 366 days?
times.put("m", 31L*24*60*60); // Or 30 days?
times.put("w", 7L*24*60*60);
times.put("d", 24L*60*60);
times.put("h", 60L*60);
String s = "1w3d4m";
long sum = 0L;
Matcher m = Pattern.compile("(\\d+)([A-Za-z]+)").matcher(s);
while (m.find())
{
String type = m.group(2);
String multiplier = m.group(1);
sum += times.get(type) * Integer.parseInt(multiplier);
}
System.out.println(sum);
}
这是输出:
11577600