程序员scholar 程序员scholar
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
npm

(进入注册为作者充电)

  • 快速入门

  • 克隆

  • 类型转换

    • 类型转换工具类 - Convert
      • 1. 痛点分析
      • 2. Convert 类简介
      • 3. 常见类型转换
        • 3.1 转换为字符串
        • 3.2 转换为指定类型数组
        • 3.3 转换为日期对象
        • 3.4 转换为集合
      • 4. 进阶类型转换
        • 4.1 半角与全角转换
        • 4.2 16 进制与字符串转换
      • 5. 其他实用类型转换
        • 5.1 时间单位转换
      • 6. 数字与文本转换
        • 6.1 金额大小写转换
    • 自定义类型转换 - ConverterRegistry
  • 日期时间

  • IO流相关

  • 工具类

  • 语言特性

  • JavaBean

  • 集合类

  • Map

  • Codec编码

  • 文本操作

  • 注解

  • 比较器

  • 异常

  • 数学

  • 线程和并发

  • 图片

  • 网络

  • 源码编译

  • 配置文件

  • 日志

  • 缓存

  • JSON

  • 加密解密

  • DFA查找

  • HTTP客户端

  • 定时任务

  • 扩展

  • 切面

  • 脚本

  • Office文档操作

  • 系统调用

  • 图形验证码

  • 网络Socket

  • JWT

  • Hutoll
  • 类型转换
scholar
2024-08-20
目录

类型转换工具类 - Convert

# 类型转换工具类 - Convert

# 1. 痛点分析

在 Java 开发中,类型转换是一个常见且容易出错的操作,尤其是在处理多种来源(如用户输入、HTTP 请求参数等)的数据时,通常需要手动进行类型转换,并处理可能的转换失败。这不仅增加了代码复杂度,还可能导致运行时错误。为了解决这一问题,Hutool 提供了 Convert 工具类,极大地简化了各种类型转换操作。

# 2. Convert 类简介

Hutool 的 Convert 工具类支持将任意类型转换为常见的目标类型,如字符串、数组、日期、集合等。同时,Convert 的大部分方法支持传入默认值,当转换失败时返回该默认值,避免了繁琐的异常处理。

主要功能包括:

  • 基本类型与字符串的相互转换
  • 集合与数组的转换
  • 日期格式转换
  • Unicode 与字符串的转换
  • 16 进制与字符串的转换
  • 时间单位转换

# 3. 常见类型转换

# 3.1 转换为字符串

import cn.hutool.core.convert.Convert;

public class ConvertExample {
    public static void main(String[] args) {
        int a = 1;
        // 将整数 a 转换为字符串,结果为 "1"
        String aStr = Convert.toStr(a);

        long[] b = {1, 2, 3, 4, 5};
        // 将 long 数组 b 转换为字符串,结果为 "[1, 2, 3, 4, 5]"
        String bStr = Convert.toStr(b);

        System.out.println(aStr); // 输出:1
        System.out.println(bStr); // 输出:[1, 2, 3, 4, 5]
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

API 说明

  • toStr(Object value):将任意对象转换为字符串。
    • value:需要转换的对象。
    • 返回值:转换后的字符串表示。

实际开发场景

在开发中,经常需要将各种类型的数据转换为字符串进行日志输出、拼接 URL 参数等。Convert.toStr() 方法可以极大地简化这些操作,避免手动进行复杂的字符串拼接。

int orderId = 12345;
String url = "https://example.com/order?id=" + Convert.toStr(orderId);
System.out.println("访问的 URL 是:" + url); // 输出:访问的 URL 是:https://example.com/order?id=12345
1
2
3

# 3.2 转换为指定类型数组

import cn.hutool.core.convert.Convert;

public class ConvertExample {
    public static void main(String[] args) {
        String[] b = {"1", "2", "3", "4"};
        // 将字符串数组 b 转换为 Integer 数组,结果为 [1, 2, 3, 4]
        Integer[] intArray = Convert.toIntArray(b);

        long[] c = {1, 2, 3, 4, 5};
        // 将 long 数组 c 转换为 Integer 数组,结果为 [1, 2, 3, 4, 5]
        Integer[] intArray2 = Convert.toIntArray(c);

        System.out.println(java.util.Arrays.toString(intArray)); // 输出:[1, 2, 3, 4]
        System.out.println(java.util.Arrays.toString(intArray2)); // 输出:[1, 2, 3, 4, 5]
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

API 说明

  • toIntArray(Object value):将任意对象转换为 Integer 数组。
    • value:需要转换的对象(可以是字符串数组、基本类型数组等)。
    • 返回值:转换后的 Integer 数组。

实际开发场景

在处理来自前端或外部系统传递的参数时,通常需要将其转换为整型数组以便后续操作。Convert.toIntArray() 方法能够快速实现这一转换,避免手动遍历数组的繁琐。

String[] ids = request.getParameterValues("ids");
Integer[] intIds = Convert.toIntArray(ids);
// 现在可以使用 intIds 进行数据库查询或其他操作
1
2
3

# 3.3 转换为日期对象

import cn.hutool.core.convert.Convert;
import java.util.Date;

public class ConvertExample {
    public static void main(String[] args) {
        String dateStr = "2024-08-14";
        // 将字符串转换为日期对象
        Date date = Convert.toDate(dateStr);

        System.out.println(date); // 输出:Wed Aug 14 00:00:00 GMT 2024
    }
}
1
2
3
4
5
6
7
8
9
10
11
12

API 说明

  • toDate(Object value):将任意对象转换为 Date 类型。
    • value:需要转换的对象,可以是字符串、时间戳等。
    • 返回值:转换后的日期对象。

实际开发场景

在处理日期字符串时,经常需要将其转换为 Date 对象进行时间计算或格式化输出。Convert.toDate() 方法可以简化这一操作,特别适合处理前端传入的日期字符串。

String startDateStr = "2024-08-14";
Date startDate = Convert.toDate(startDateStr);
// 可以直接使用 startDate 进行日期比较或其他操作
1
2
3

# 3.4 转换为集合

import cn.hutool.core.convert.Convert;
import java.util.List;

public class ConvertExample {
    public static void main(String[] args) {
        Object[] arr = {"apple", "banana", "cherry"};
        // 将数组转换为 List 集合
        List<?> list = Convert.toList(arr);

        System.out.println(list); // 输出:[apple, banana, cherry]
    }
}
1
2
3
4
5
6
7
8
9
10
11
12

API 说明

  • toList(Object value):将任意对象转换为 List 类型。
    • value:需要转换的对象(可以是数组、集合等)。
    • 返回值:转换后的 List 集合。

实际开发场景

在需要将数组转换为集合,以便使用集合的相关操作(如遍历、筛选等)时,Convert.toList() 方法非常实用,尤其是在处理动态数组时。

String[] fruits = {"apple", "banana", "cherry"};
List<String> fruitList = Convert.toList(fruits);
// 现在可以使用 fruitList 进行遍历、添加等操作
1
2
3

# 4. 进阶类型转换

# 4.1 半角与全角转换

import cn.hutool.core.convert.Convert;

public class ConvertExample {
    public static void main(String[] args) {
        String halfWidth = "123456789";
        // 将半角数字转换为全角
        String fullWidth = Convert.toSBC(halfWidth);

        System.out.println(fullWidth); // 输出:123456789

        String fullWidth2 = "123456789";
        // 将全角数字转换为半角
        String halfWidth2 = Convert.toDBC(fullWidth2);

        System.out.println(halfWidth2); // 输出:123456789
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

API 说明

  • toSBC(String value):将半角字符转换为全角字符。

    • value:需要转换的字符串。
    • 返回值:转换后的全角字符串。
  • toDBC(String value):将全角字符转换为半角字符。

    • value:需要转换的字符串。
    • 返回值:转换后的半角字符串。

实际开发场景

在处理用户输入时,可能需要将全角字符转换为半角字符以确保数据一致性。Convert.toSBC() 和 Convert.toDBC() 方法可以高效处理这种转换需求。

String userInput = "12345";
String normalizedInput = Convert.toDBC(userInput);
// 现在 normalizedInput 可以用作数据库查询或其他逻辑判断
1
2
3

# 4.2 16 进制与字符串转换

import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.CharsetUtil;

public class ConvertExample {
    public static void main(String[] args) {
        String original = "我是一个小字符串";
        // 将字符串转换为 16 进制表示
        String hexStr = Convert.toHex(original, CharsetUtil.CHARSET_UTF_8);

        System.out.println(hexStr); // 输出:e68891e698afe4b880e4b8aae5b08fe5b08fe79a84e58fafe7b88ce5ad97e7aca6e4b8b2

        // 将 16 进制字符串转换回普通字符串
        String rawStr = Convert.hexToStr(hexStr, Charset

Util.CHARSET_UTF_8);

        System.out.println(rawStr); // 输出:我是一个小字符串
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

API 说明

  • toHex(String value, Charset charset):将字符串转换为 16 进制表示。

    • value:需要转换的字符串。
    • charset:字符集。
    • 返回值:转换后的 16 进制字符串。
  • hexToStr(String hex, Charset charset):将 16 进制字符串转换回普通字符串。

    • hex:16 进制字符串。
    • charset:字符集。
    • 返回值:转换后的普通字符串。

实际开发场景

在处理加密数据或需要将中文字符串转换为 16 进制字符串(如 URL 编码)时,Convert.toHex() 和 Convert.hexToStr() 方法非常有用。

String data = "SensitiveData123";
String hexData = Convert.toHex(data, CharsetUtil.CHARSET_UTF_8);
// 现在可以安全地将 hexData 传输或存储
1
2
3

# 5. 其他实用类型转换

# 5.1 时间单位转换

import cn.hutool.core.convert.Convert;
import java.util.concurrent.TimeUnit;

public class ConvertExample {
    public static void main(String[] args) {
        long milliseconds = 4535345;
        // 将毫秒转换为分钟
        long minutes = Convert.convertTime(milliseconds, TimeUnit.MILLISECONDS, TimeUnit.MINUTES);

        System.out.println(minutes); // 输出:75
    }
}
1
2
3
4
5
6
7
8
9
10
11
12

API 说明

  • convertTime(long sourceDuration, TimeUnit sourceUnit, TimeUnit targetUnit):在不同时间单位之间进行转换。
    • sourceDuration:原始时间值。
    • sourceUnit:原始时间单位。
    • targetUnit:目标时间单位。
    • 返回值:转换后的时间值。

实际开发场景

在处理时间数据时,Convert.convertTime() 可以快速将不同时间单位之间进行转换,例如将任务执行时间从毫秒转换为小时或分钟。

long executionTime = 3600000; // 1 小时
long hours = Convert.convertTime(executionTime, TimeUnit.MILLISECONDS, TimeUnit.HOURS);
System.out.println("任务执行时间为:" + hours + " 小时");
1
2
3

# 6. 数字与文本转换

# 6.1 金额大小写转换

import cn.hutool.core.convert.Convert;

public class ConvertExample {
    public static void main(String[] args) {
        double amount = 67556.32;
        // 将金额转换为大写中文表示
        String digitUppercase = Convert.digitToChinese(amount);

        System.out.println(digitUppercase); // 输出:陆万柒仟伍佰伍拾陆元叁角贰分
    }
}
1
2
3
4
5
6
7
8
9
10
11

API 说明

  • digitToChinese(double value):将金额数字转换为中文大写。
    • value:金额数值。
    • 返回值:转换后的中文大写金额。

实际开发场景

在财务应用中,通常需要将金额数字转换为中文大写以用于发票、账单生成等场景。Convert.digitToChinese() 方法可以轻松实现这一需求。

double amount = 12345.67;
String amountInWords = Convert.digitToChinese(amount);
System.out.println("应付金额:" + amountInWords); // 输出:壹万贰仟叁佰肆拾伍元陆角柒分
1
2
3

总结

Convert 工具类为开发者提供了强大且灵活的类型转换功能,帮助你在实际开发中轻松处理各种类型转换需求,简化代码逻辑、提高开发效率。在你的项目中,根据实际需求选择合适的 Convert 方法,可以显著减少转换错误,并提高代码的可维护性。

编辑此页 (opens new window)
上次更新: 2024/12/28, 18:32:08
支持泛型的克隆接口和克隆类
自定义类型转换 - ConverterRegistry

← 支持泛型的克隆接口和克隆类 自定义类型转换 - ConverterRegistry→

Theme by Vdoing | Copyright © 2019-2025 程序员scholar
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式