类型转换工具类 - 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]
}
}
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
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]
}
}
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 进行数据库查询或其他操作
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
}
}
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 进行日期比较或其他操作
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]
}
}
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 进行遍历、添加等操作
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
}
}
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 可以用作数据库查询或其他逻辑判断
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); // 输出:我是一个小字符串
}
}
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 传输或存储
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
}
}
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 + " 小时");
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); // 输出:陆万柒仟伍佰伍拾陆元叁角贰分
}
}
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); // 输出:壹万贰仟叁佰肆拾伍元陆角柒分
2
3
总结
Convert
工具类为开发者提供了强大且灵活的类型转换功能,帮助你在实际开发中轻松处理各种类型转换需求,简化代码逻辑、提高开发效率。在你的项目中,根据实际需求选择合适的 Convert
方法,可以显著减少转换错误,并提高代码的可维护性。