首页 > 其他分享 >核心(Hutool-core)类型转换Convert类

核心(Hutool-core)类型转换Convert类

时间:2024-07-31 10:06:54浏览次数:13  
标签:类型转换 Convert 转换 String Hutool 字符串 UTF

Java常见类型转换
转换为字符串:
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);
转换为指定类型数组:
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);
转换为日期对象:
String a = "2017-05-06";
Date value = Convert.toDate(a);
转换为集合
Object[] a = {"a", "你", "好", "", 1};
List list = Convert.convert(List.class, a); //从4.1.11开始可以这么用 List list = Convert.toList(a);

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

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

Object[] a = { "a", "你", "好", "", 1 };
List list = Convert.convert(new TypeReference<List>() {}, 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);
注意 转换为大写只能精确到分(小数点儿后两位),之后的数字会被忽略。

数字转换

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

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

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

原始类和包装类转换

有的时候,我们需要将包装类和原始类相互转换(比如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);

标签:类型转换,Convert,转换,String,Hutool,字符串,UTF
From: https://www.cnblogs.com/velloLei/p/18334010

相关文章

  • numpy 数字输出周围有类型转换,这是我的程序中的一个错误
    我使用四元数函数将python元组转换为numpy数组,然后将返回的numpy数组转换回元组。这里,start_pos是一个元组(0,0,0)第二个元组进入列表。current_pos=np.array(start_pos)current_quaternion=Quaternion.from_axis_angle(np.array([0,0,1]),math.......
  • Java的基础05(类型转换)
    类型转换   概念由于java是强类型语言,所以在进行有些运算时需要用到类型转换;低——————————>高byte,short,char--->int--->long(64)--->float(32)--->double(小数的优先级一定大于整数)运算中,不同类型的数据先转化为同一类型,然后进行运算;强制类型转换;自动类型......
  • 12个Python数据类型转换实战演练
    文末赠免费精品编程资料~~在Python编程中,数据类型转换是处理数据时必不可少的技能。掌握如何灵活地在不同类型之间转换,能让你的代码更加高效和灵活。下面,我们将通过一系列实战演练,学习并实践12种常见的Python数据类型转换。1.整数转字符串实战案例:将年龄转换为字符串......
  • java判断ip地址是否正确,使用hutool工具判断ip地址
    1.导入hutool的maven依赖<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.16</version></dependency>2.直接复制一下代码importcn.h......
  • LeetCode 2976 Minimum Cost to Convert String I
    MinimumCosttoConvertStringIProblemDescriptionYouaregiventwo0-indexedstrings,sourceandtarget,bothoflengthnandconsistingoflowercaseEnglishletters.Youarealsoprovidedwithtwo0-indexedcharacterarrays,originalandchanged,a......
  • Linux--C语言数据类型转换
    目录一、数据类型之间的转换(一)规则:不同的数据类型参与运算,需要转换为同一类型后运算1.数值比较由小到大简单排序:2.隐式类型转换3.强制类型转换二、运算符(一)算术运算符1.单目运算符(1)++i与i++的区别(2)--i和i--区别2.双目运算符3.三目运算符(二)关系运算符(1)什么是......
  • 嵌入式学习第三天:转义字符、算术运算、类型转换...
    目录转义字符运算符优先级和结合性+加法运算符 -减法运算符*乘法运算符/除法运算符%求余运算符/的注意要点: %的注意要点:--自减运算符++自增运算符&取地址运算符,逗号运算符=赋值运算符不同类型的数据间混合赋值总结高精度——>低精度长类型——>短......
  • springboot+vue前后端分离项目:导出功能报错Request processing failed: cn.hutool.cor
    1.报错截图: 2.hutool官网,推荐引入poi-ooxml依赖 3.mvn仓库找到依赖 4.用最新版依赖 5.复制到本项目pom.xml,刷新maven 解决......
  • C++中的四种类型转换(静态、动态、常量、重新解释。
    在C++中,类型转换是编程语言中的一个重要概念,它允许我们将一种数据类型的值转换为另一种数据类型。C++提供了四种主要的类型转换方式:静态类型转换(StaticCast)、动态类型转换(DynamicCast)、常量类型转换(ConstCast)和重新解释类型转换(ReinterpretCast)。每种转换都有其特定的用途......
  • [java][工具使用]使用hutool解析json
    使用hutool解析json注意点:1.数组和字典接受的对象和方法不一样        数组使用JSONArray       字典使用JSONObject2.如果字典中提取不存在的key,返回的结果nullpackagecn.npsel.test;importcn.hutool.json.JSONArray;importcn.hutool.json.JSONOb......