Hutool Hutool
首页
指南
  • 核心(Hutool-core)
  • 配置文件(Hutool-setting)
  • 日志(Hutool-log)
  • 缓存(Hutool-cache)
  • JSON(Hutool-json)
  • 加密解密(Hutool-crypto)
  • DFA查找(Hutool-dfa)
  • 数据库(Hutool-db)
  • HTTP客户端(Hutool-http)
  • 定时任务(Hutool-cron)
  • 扩展(Hutool-extra)
  • 布隆过滤(Hutool-bloomFilter)
  • 切面(Hutool-aop)
  • 脚本(Hutool-script)
  • Office文档操作(Hutool-poi)
  • 系统调用(Hutool-system)
  • 图形验证码(Hutool-captcha)
  • 网络Socket(Hutool-socket)
  • JWT(Hutool-jwt)
支持
更新记录 (opens new window)
GitHub (opens new window)
首页
指南
  • 核心(Hutool-core)
  • 配置文件(Hutool-setting)
  • 日志(Hutool-log)
  • 缓存(Hutool-cache)
  • JSON(Hutool-json)
  • 加密解密(Hutool-crypto)
  • DFA查找(Hutool-dfa)
  • 数据库(Hutool-db)
  • HTTP客户端(Hutool-http)
  • 定时任务(Hutool-cron)
  • 扩展(Hutool-extra)
  • 布隆过滤(Hutool-bloomFilter)
  • 切面(Hutool-aop)
  • 脚本(Hutool-script)
  • Office文档操作(Hutool-poi)
  • 系统调用(Hutool-system)
  • 图形验证码(Hutool-captcha)
  • 网络Socket(Hutool-socket)
  • JWT(Hutool-jwt)
支持
更新记录 (opens new window)
GitHub (opens new window)
  • 快速入门

    • 简介
  • 核心(Hutool-core)

    • 克隆

      • 支持泛型的克隆接口和克隆类
    • 类型转换

      • 类型转换工具类-Convert
        • 痛点
        • Convert类
          • Java常见类型转换
          • 其它类型转换
          • 半角和全角转换
          • 16进制(Hex)
          • Unicode和字符串转换
          • 编码转换
          • 时间单位转换
          • 金额大小写转换
          • 数字转换
          • 原始类和包装类转换
      • 自定义类型转换-ConverterRegistry
    • 日期时间

      • 概述
      • 日期时间工具-DateUtil
      • 日期时间对象-DateTime
      • 农历日期-ChineseDate
      • LocalDateTime工具-LocalDateTimeUtil
      • 计时器工具-TimeInterval
    • IO流相关

      • 概述
      • IO工具类-IoUtil
      • 文件工具类-FileUtil
      • 文件监听-WatchMonitor
      • 文件类型判断-FileTypeUtil
      • 文件

        • 文件读取-FileReader
        • 文件写入-FileWriter
        • 文件追加-FileAppender
        • 文件跟随-Tailer
        • 文件名工具-FileNameUtil
      • 资源

        • 概述
        • 资源工具-ResourceUtil
        • ClassPath资源访问-ClassPathResource
    • 工具类

      • 概述
      • 字符串工具-StrUtil
      • 16进制工具-HexUtil
      • Escape工具-EscapeUtil
      • Hash算法-HashUtil
      • URL工具-URLUtil
      • XML工具-XmlUtil
      • 对象工具-ObjectUtil
      • 反射工具-ReflectUtil
      • 泛型类型工具-TypeUtil
      • 分页工具-PageUtil
      • 剪贴板工具-ClipboardUtil
      • 类工具-ClassUtil
      • 枚举工具-EnumUtil
      • 命令行工具-RuntimeUtil
      • 数字工具-NumberUtil
      • 数组工具-ArrayUtil
      • 随机工具-RandomUtil
      • 唯一ID工具-IdUtil
      • 压缩工具-ZipUtil
      • 引用工具-ReferenceUtil
      • 正则工具-ReUtil
      • 身份证工具-IdcardUtil
      • 信息脱敏工具-DesensitizedUtil
      • 社会信用代码工具-CreditCodeUtil
      • SPI加载工具-ServiceLoaderUtil
      • 字符编码工具-CharsetUtil
      • 类加载工具-ClassLoaderUtil
    • 语言特性

      • 概述
      • HashMap扩展-Dict
      • 单例工具-Singleton
      • 断言-Assert
      • 二进码十进数-BCD
      • 控制台打印封装-Console
      • 字段验证器-Validator
      • 字符串格式化-StrFormatter
      • 树结构

        • 树结构工具-TreeUtil
    • JavaBean

      • 概述
      • Bean工具-BeanUtil
      • DynaBean
      • 表达式解析-BeanPath
      • Bean描述-BeanDesc
      • 空检查属性获取-Opt
    • 集合类

      • 概述
      • 集合工具-CollUtil
      • 列表工具-ListUtil
      • Iterator工具-IterUtil
      • 有界优先队列-BoundedPriorityQueue
      • 线程安全的HashSet-ConcurrentHashSet
      • 集合串行流工具-CollStreamUtil
      • 行遍历器-LineIter
    • Map

      • 概述
      • Map工具-MapUtil
      • 双向查找Map-BiMap
      • 可重复键值Map-TableMap
      • Map流式构建器-MapBuilder copy
    • Codec编码

      • Base62编码解码-Base62
      • Base64编码解码-Base64
      • Base32编码解码-Base32
      • 莫尔斯电码-Morse
      • BCD码-BCD
      • 回转N位密码-Rot
      • Punycode实现-PunyCode
    • 文本操作

      • CSV文件处理工具-CsvUtil
      • Unicode编码转换工具-UnicodeUtil
      • 可复用字符串生成器-StrBuilder
      • 字符串切割-StrSplitter
    • 注解

      • 注解工具-AnnotationUtil
    • 比较器

      • 概述
      • 比较工具-CompareUtil
      • 版本比较器-VersionComparator
    • 异常

      • 异常工具-ExceptionUtil
      • 其它异常封装
    • 数学

      • 数学相关-MathUtil
    • 线程和并发

      • 线程工具-ThreadUtil
      • 异步工具类-AsyncUtil
      • 自定义线程池-ExecutorBuilder
      • 高并发测试-ConcurrencyTester
    • 图片

      • 图片工具-ImgUtil
      • 图片编辑器-Img
    • 网络

      • 网络工具-NetUtil
      • URL生成器-UrlBuilder
    • 源码编译

      • 源码编译工具-CompilerUtil
  • 配置文件(Hutool-setting)

    • 概述
    • Properties扩展-Props
    • 设置文件-Setting
  • 日志(Hutool-log)

    • 概述
    • 日志工厂-LogFactory
    • 疑惑解答
    • 静态调用日志-StaticLog
  • 缓存(Hutool-cache)

    • 概述
    • 缓存工具-CacheUtil
    • 先入先出-FIFOCache
    • 文件缓存-FileCache
    • 最少使用-LFUCache
    • 最近最久未使用-LRUCache
    • 超时-TimedCache
    • 弱引用-WeakCache
  • JSON(Hutool-json)

    • 概述
    • JSON工具-JSONUtil
    • JSON对象-JSONObject
    • JSON数组-JSONArray
  • 加密解密(Hutool-crypto)

    • 概述
    • 加密解密工具-SecureUtil
    • 国密算法工具-SmUtil
    • 对称加密-SymmetricCrypto
    • 摘要加密-Digester
    • 消息认证码算法-HMac
    • 签名和验证-Sign
    • 非对称加密-AsymmetricCrypto
  • DFA查找(Hutool-dfa)

    • 概述
    • DFA查找
  • 数据库(Hutool-db)

    • 概述
    • SQL执行器-SqlExecutor
    • 支持事务的CRUD-Session
    • 数据库简单操作-Db
    • 数据源工厂-DsFactory
    • 数据源配置db.setting样例
    • 案例1-导出Blob字段图像
    • 常见问题
    • NoSQL

      • Redis客户端封装-RedisDS
      • MongoDB客户端封装-MongoDS
  • HTTP客户端(Hutool-http)

    • 概述
    • Http客户端工具类-HttpUtil
    • HTML工具类-HtmlUtil
    • Http响应-HttpResponse
    • Http请求-HttpRequest
    • UA工具类-UserAgentUtil
    • 常用Http状态码-HttpStatus
    • 案例1-爬取开源中国的开源资讯
    • 常见问题
    • Server

      • 简易Http服务器-SimpleServer
    • WebService

      • Soap客户端-SoapClient
  • 定时任务(Hutool-cron)

    • 概述
    • 全局定时任务-CronUtil
  • 扩展(Hutool-extra)

    • 概述
    • Servlet工具-ServletUtil
    • 二维码工具-QrCodeUtil
    • 邮件工具-MailUtil
    • cglib

      • Cglib工具-CglibUtil
    • emoji

      • Emoji工具-EmojiUtil
    • FTP

      • FTP客户端封装-Ftp
      • 简易FTP服务器-SimpleFtpServer
    • Jsch封装

      • SFTP封装-Sftp
      • Jsch工具-JschUtil
    • Spring

      • Spring工具-SpringUtil
    • 中文分词

      • 中文分词封装-TokenizerUtil
    • 压缩

      • 压缩封装-CompressUtil
    • 拼音

      • 拼音工具-PinyinUtil
    • 表达式引擎

      • 表达式引擎封装-ExpressionUtil
    • 模板引擎

      • 模板引擎封装-TemplateUtil
  • 布隆过滤(Hutool-bloomFilter)

    • 概述
  • 切面(Hutool-aop)

    • 概述
    • 切面代理工具-ProxyUtil
  • 脚本(Hutool-script)

    • 概述
    • Script工具-ScriptUtil
  • Office文档操作(Hutool-poi)

    • 概述
    • Excel工具-ExcelUtil
    • Excel生成-ExcelWriter
    • Excel大数据生成-BigExcelWriter
    • Excel读取-ExcelReader
    • Word生成-Word07Writer
    • 流方式读取Excel2003-Excel03SaxReader
    • 流方式读取Excel2007-Excel07SaxReader
  • 系统调用(Hutool-system)

    • 系统属性调用-SystemUtil
    • Oshi封装-OshiUtil
  • 图形验证码(Hutool-captcha)

    • 概述
  • 网络Socket(Hutool-socket)

    • 概述
    • AIO封装-AioServer和AioClient
    • NIO封装-NioServer和NioClient
  • JWT(Hutool-jwt)

    • 概述
    • JWT工具-JWTUtil
    • JWT签名工具-JWTSignerUtil
    • JWT验证-JWTValidator
  • 指南
  • 核心(Hutool-core)
  • 类型转换
Hutool
2023-03-28
目录

类型转换工具类-Convert

特别赞助 by:

# 痛点

在Java开发中我们要面对各种各样的类型转换问题,尤其是从命令行获取的用户参数、从HttpRequest获取的Parameter等等,这些参数类型多种多样,我们怎么去转换他们呢?常用的办法是先整成String,然后调用XXX.parseXXX方法,还要承受转换失败的风险,不得不加一层try catch,这个小小的过程混迹在业务代码中会显得非常难看和臃肿。

# Convert类

Convert类可以说是一个工具方法类,里面封装了针对Java常见类型的转换,用于简化类型转换。Convert类中大部分方法为toXXX,参数为Object,可以实现将任意可能的类型转换为指定类型。同时支持第二个参数defaultValue用于在转换失败时返回一个默认值。

# Java常见类型转换

  1. 转换为字符串:
int a = 1;
//aStr为"1"
String aStr = Convert.toStr(a);

long[] b = {1,2,3,4,5};
//bStr为:"[1, 2, 3, 4, 5]"
String bStr = Convert.toStr(b);
  1. 转换为指定类型数组:
String[] b = { "1", "2", "3", "4" };
//结果为Integer数组
Integer[] intArray = Convert.toIntArray(b);

long[] c = {1,2,3,4,5};
//结果为Integer数组
Integer[] intArray2 = Convert.toIntArray(c);
  1. 转换为日期对象:
String a = "2017-05-06";
Date value = Convert.toDate(a);
  1. 转换为集合
Object[] a = {"a", "你", "好", "", 1};
List<?> list = Convert.convert(List.class, a);
//从4.1.11开始可以这么用
List<?> list = Convert.toList(a);

# 其它类型转换

  1. 标准类型

通过Convert.convert(Class<T>, Object)方法可以将任意类型转换为指定类型,Hutool中预定义了许多类型转换,例如转换为URI、URL、Calendar等等,这些类型的转换都依托于ConverterRegistry类。通过这个类和Converter接口,我们可以自定义一些类型转换。详细的使用请参阅“自定义类型转换”一节。

  1. 泛型类型

通过convert(TypeReference<T> reference, Object value)方法,自行new一个TypeReference对象可以对嵌套泛型进行类型转换。例如,我们想转换一个对象为List<String>类型,此时传入的标准Class就无法满足要求,此时我们可以这样:

Object[] a = { "a", "你", "好", "", 1 };
List<String> list = Convert.convert(new TypeReference<List<String>>() {}, a);

通过TypeReference实例化后制定泛型类型,即可转换对象为我们想要的目标类型。

# 半角和全角转换

在很多文本的统一化中这两个方法非常有用,主要对标点符号的全角半角转换。

半角转全角:

String a = "123456789";

//结果为:"123456789"
String sbc = Convert.toSBC(a);

全角转半角:

String a = "123456789";

//结果为"123456789"
String dbc = Convert.toDBC(a);

# 16进制(Hex)

在很多加密解密,以及中文字符串传输(比如表单提交)的时候,会用到16进制转换,就是Hex转换,为此Hutool中专门封装了HexUtil工具类,考虑到16进制转换也是转换的一部分,因此将其方法也放在Convert类中,便于理解和查找,使用同样非常简单:

转为16进制(Hex)字符串

String a = "我是一个小小的可爱的字符串";

//结果:"e68891e698afe4b880e4b8aae5b08fe5b08fe79a84e58fafe788b1e79a84e5ad97e7aca6e4b8b2"
String hex = Convert.toHex(a, CharsetUtil.CHARSET_UTF_8);

将16进制(Hex)字符串转为普通字符串:

String hex = "e68891e698afe4b880e4b8aae5b08fe5b08fe79a84e58fafe788b1e79a84e5ad97e7aca6e4b8b2";

//结果为:"我是一个小小的可爱的字符串"
String raw = Convert.hexStrToStr(hex, CharsetUtil.CHARSET_UTF_8);

//注意:在4.1.11之后hexStrToStr将改名为hexToStr
String raw = Convert.hexToStr(hex, CharsetUtil.CHARSET_UTF_8);

因为字符串牵涉到编码问题,因此必须传入编码对象,此处使用UTF-8编码。 toHex方法同样支持传入byte[],同样也可以使用hexToBytes方法将16进制转为byte[]

# Unicode和字符串转换

与16进制类似,Convert类同样可以在字符串和Unicode之间轻松转换:

String a = "我是一个小小的可爱的字符串";

//结果为:"\\u6211\\u662f\\u4e00\\u4e2a\\u5c0f\\u5c0f\\u7684\\u53ef\\u7231\\u7684\\u5b57\\u7b26\\u4e32"	
String unicode = Convert.strToUnicode(a);

//结果为:"我是一个小小的可爱的字符串"
String raw = Convert.unicodeToStr(unicode);

很熟悉吧?如果你在properties文件中写过中文,你会明白这个方法的重要性。

# 编码转换

在接收表单的时候,我们常常被中文乱码所困扰,其实大多数原因是使用了不正确的编码方式解码了数据。于是Convert.convertCharset方法便派上用场了,它可以把乱码转为正确的编码方式:

String a = "我不是乱码";
//转换后result为乱码
String result = Convert.convertCharset(a, CharsetUtil.UTF_8, CharsetUtil.ISO_8859_1);
String raw = Convert.convertCharset(result, CharsetUtil.ISO_8859_1, "UTF-8");
Assert.assertEquals(raw, a);

注意 经过测试,UTF-8编码后用GBK解码再用GBK编码后用UTF-8解码会存在某些中文转换失败的问题。

# 时间单位转换

Convert.convertTime方法主要用于转换时长单位,比如一个很大的毫秒,我想获得这个毫秒数对应多少分:

long a = 4535345;

//结果为:75
long minutes = Convert.convertTime(a, TimeUnit.MILLISECONDS, TimeUnit.MINUTES);

# 金额大小写转换

面对财务类需求,Convert.digitToChinese将金钱数转换为大写形式:

double a = 67556.32;

//结果为:"陆万柒仟伍佰伍拾陆元叁角贰分"
String digitUppercase = Convert.digitToChinese(a);

注意 转换为大写只能精确到分(小数点儿后两位),之后的数字会被忽略。

# 数字转换

  1. 数字转为英文表达
// ONE HUNDRED AND CENTS TWENTY THREE ONLY
String format = Convert.numberToWord(100.23);
  1. 数字简化
// 1.2k
String format1 = Convert.numberToSimple(1200, false);
  1. 数字转中文

数字转中文方法中,只保留两位小数

// 一万零八百八十九点七二
String f1 = Convert.numberToChinese(10889.72356, false);

// 使用金额大写
// 壹万贰仟陆佰伍拾叁
String f1 = Convert.numberToChinese(12653, true);
  1. 数字中文表示转换为数字
// 1012
String f1 = Convert.numberToChinese("一千零一十二");

# 原始类和包装类转换

有的时候,我们需要将包装类和原始类相互转换(比如Integer.class 和 int.class),这时候我们可以:

//去包装
Class<?> wrapClass = Integer.class;

//结果为:int.class
Class<?> unWraped = Convert.unWrap(wrapClass);

//包装
Class<?> primitiveClass = long.class;

//结果为:Long.class
Class<?> wraped = Convert.wrap(primitiveClass);
上次更新: 2023/05/08, 01:55:50
支持泛型的克隆接口和克隆类
自定义类型转换-ConverterRegistry

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

Theme by Vdoing | Copyright © 2023-2023 Hutool | MulanPSL-2.0
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式