Java解析带有时间单位的字符串

近期遇到这样一个场景,需要将输入的“20s”解析成200ms,或者“1min”解析成60000ms等,没找到合适的工具类,暂且自己写了一个记录下来。

import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.Pair;

import java.util.concurrent.TimeUnit;

/**
 * @author: sea
 * @date: 2022/10/18 18:35
 */
public class TimeUtil {
    public static long parseUnitTimeToMillSeconds(String timeWithUnit) {
        Pair<Long, TimeUnit> pair = parseAndSplitTimeWithUnit(timeWithUnit);
        return pair.getRight().toMillis(pair.getLeft());
    }

    /**
     * 将带有时间单位的字符串进行分割
     * 比如:200ms 分割成 200和ms
     * 支持的时间单位:ns纳秒,us微妙,ms毫秒,s秒,min分钟,h小时,d天
     * 默认是ms,比如200,会解析成200ms
     * @param timeWithUnit
     * @return
     */
    public static Pair<Long, TimeUnit> parseAndSplitTimeWithUnit(String timeWithUnit) {
        if (StringUtils.isBlank(timeWithUnit)) {
            return Pair.of(0L, TimeUnit.MILLISECONDS);
        }

        char[] chars = timeWithUnit.toCharArray();
        int length = chars.length;
        int position = length - 1;
        while (position >= 0 && Character.isLetter(chars[position])) {
            position--;
        }
        position = Math.min(position + 1, length);
        String timeStr = StringUtils.substring(timeWithUnit, 0, position);
        long time = Long.parseLong(StringUtils.trim(timeStr));
        String unitStr = StringUtils.substring(timeWithUnit, position, length);
        if (StringUtils.isBlank(unitStr)) {
            return Pair.of(time, TimeUnit.MILLISECONDS);
        }

        TimeUnit unit = convertTimeUnit(unitStr);
        if (unit == null) {
            throw new IllegalArgumentException("不支持该时间单位:" + unitStr);
        }
        return Pair.of(time, unit);
    }

    private static TimeUnit convertTimeUnit(String unitStr) {
        TimeUnit timeUnit = null;
        unitStr = StringUtils.lowerCase(unitStr);
        unitStr = StringUtils.trim(unitStr);
        switch (unitStr) {
            case "ns":
                timeUnit = TimeUnit.NANOSECONDS;
                break;
            case "us":
                timeUnit = TimeUnit.MICROSECONDS;
                break;
            case "ms":
                timeUnit = TimeUnit.MILLISECONDS;
                break;
            case "s":
                timeUnit = TimeUnit.SECONDS;
                break;
            case "min":
                timeUnit = TimeUnit.MINUTES;
                break;
            case "h":
                timeUnit = TimeUnit.HOURS;
                break;
            case "d":
                timeUnit = TimeUnit.DAYS;
                break;
        }
        System.out.println(timeUnit);
        return timeUnit;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
假设你的json字符串如下所示: ```json { "name": "example", "image": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH5AEMDQw2fRfabQAAABl0RVh0Q29tbWVudABDcmVhdGVkIHdpdGggR0lNUFeBDhcAAAAPdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjExR/NCNwAAAB9JREFUOE9jYBgFgKICAAjDwYvTcKAAAAAElFTkSuQmCC" } ``` 其中 `image` 字段是一个 base64 编码的图片数据。可以使用 Gson 解析该 json 字符串,然后将 base64 编码的图片数据解码成二进制数据。 ```java import com.google.gson.Gson; import java.util.Base64; public class Example { public static void main(String[] args) { String json = "{\"name\": \"example\",\"image\": \"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH5AEMDQw2fRfabQAAABl0RVh0Q29tbWVudABDcmVhdGVkIHdpdGggR0lNUFeBDhcAAAAPdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjExR/NCNwAAAB9JREFUOE9jYBgFgKICAAjDwYvTcKAAAAAElFTkSuQmCC\"}"; Gson gson = new Gson(); ExampleData data = gson.fromJson(json, ExampleData.class); // 解码图片数据 byte[] imageData = Base64.getDecoder().decode(data.getImage()); // 使用图片数据进行操作 // ... } private static class ExampleData { private String name; private String image; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getImage() { return image; } public void setImage(String image) { this.image = image; } } } ``` 在上面的示例中,`ExampleData` 类是 Gson 解析 json 字符串后的数据类,其中包括 `name` 和 `image` 两个字段。`image` 字段的值是一个 base64 编码的字符串,在解析 json 字符串后,使用 `Base64.getDecoder()` 方法将其解码成二进制数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值