首页 » Web前端 » php转义emoji技巧_Hutool中那些常用的对象类和实用方法

php转义emoji技巧_Hutool中那些常用的对象类和实用方法

访客 2024-11-23 0

扫一扫用手机浏览

文章目录 [+]

灵魂拷问2:还在为项目中工具类掩护而烦恼?

简述

Hutool它是一个Java工具集类库,包含了很多静态方法的封装:流处理、韶光日期处理、正则处理、加解密处理、文件处理、凑集处理等,可以说是项目中险些所有XxxxUtil的替代品,它可以使你更多的关注代码逻辑,优雅的写出高效代码,避免“复制粘贴,改改再战”。

php转义emoji技巧_Hutool中那些常用的对象类和实用方法

”️组件

模块划分预览,可以根据需求对每个模块单独引入,也可以通过引入hutool-all办法引入所有模块。

php转义emoji技巧_Hutool中那些常用的对象类和实用方法
(图片来自网络侵删)

模块

先容

hutool-aop

JDK动态代理封装,供应非IOC下的切面支持

hutool-bloomFilter

布隆过滤,供应一些Hash算法的布隆过滤

hutool-cache

大略缓存实现

hutool-core

核心,包括Bean操作、日期、各种Util等

hutool-cron

定时任务模块,供应类Crontab表达式的定时任务

hutool-crypto

加密解密模块,供应对称、非对称和择要算法封装

hutool-db

JDBC封装后的数据操作,基于ActiveRecord思想

hutool-dfa

基于DFA模型的多关键字查找

hutool-extra

扩展模块,对第三方封装(模板引擎、邮件、Servlet、二维码、Emoji、FTP、分词等)

hutool-http

基于HttpUrlConnection的Http客户端封装

hutool-log

自动识别日志实现的日志门面

hutool-script

脚本实行封装,例如Javascript

hutool-setting

功能更强大的Setting配置文件和Properties封装

hutool-system

系统参数调用封装(JVM信息等)

hutool-json

JSON实现

hutool-captcha

图片验证码实现

hutool-poi

针对POI中Excel和Word的封装

hutool-socket

基于Java的NIO和AIO的Socket封装

hutool-jwt

JSON Web Token (JWT)封装实现

☀️常用

⚠️只列举部分方法,详细可查看源码学习!


1、核心工具集1.1、日期韶光工具-DateUtil

日期转换再常用不过了,字符串转日期格式、日期格式转指定字符串格式、获取当前系统日期、韶光差

// 自定义日期格式转化String dateStr = "2017-03-01";Date date = DateUtil.parse(dateStr, "yyyy-MM-dd");1.2、农历日期-ChineseDate

供应了生肖、天干地支、传统节日等方法。

//通过公历构建ChineseDate date = new ChineseDate(DateUtil.parseDate("2020-01-25"));// 一月date.getChineseMonth();// 正月date.getChineseMonthName();// 月朔date.getChineseDay();// 庚子date.getCyclical();// 生肖:鼠date.getChineseZodiac();// 传统节日(部分支持,逗号分隔):春节date.getFestivals();// 庚子鼠年 正月月朔date.toString();1.3、计时器工具-TimeInterval

打算方法或过程实行的韶光,支持分组计时,方便比拟韶光

TimeInterval timer = DateUtil.timer();//---------------------------------//-------这是实行过程//---------------------------------timer.interval();//花费毫秒数timer.intervalRestart();//返回花费韶光,并重置开始韶光timer.intervalMinute();//花费分钟数1.4、文件类型判断-FileTypeUtil

在文件上传时,有时候我们须要判断文件类型。
但是又不能大略的通过扩展名来判断(防止恶意脚本等通过上传到做事器上),于是我们须要在做事端通过读取文件的首部几个二进制位来判断常用的文件类型。

File file = FileUtil.file("d:/test.jpg");String type = FileTypeUtil.getType(file);//输出 jpg则解释确实为jpg文件Console.log(type);1.5、符串工具-StrUtil

这个工具的用途类似于Apache Commons Lang中的StringUtil,字符串判空操作就不再累述,StrUtil只做增强:sub、removePrefix、removeSuffix

// 去掉字符串的后缀,例如去个文件名的扩展名。
String fileName = StrUtil.removeSuffix("pretty_girl.jpg", ".jpg") //fileName -> pretty_girl
1.6、16进制工具-HexUtil

16进制一样平常针对无法显示的一些二进制进行显示,常用于: 1、图片的字符串表现形式 2、加密解密 3、编码转换

String str = "我是一个字符串";String hex = HexUtil.encodeHexStr(str, CharsetUtil.CHARSET_UTF_8);//hex是://e68891e698afe4b880e4b8aae5ad97e7aca6e4b8b2String decodedStr = HexUtil.decodeHexStr(hex);//解码后与str相同1.7、Escape工具-EscapeUtil

转义和反转义工具类Escape / Unescape。
escape采取ISO Latin字符集对指定的字符串进行编码。
所有的空格符、标点符号、分外字符以及其他非ASCII字符都将被转化成%xx格式的字符编码(xx即是该字符在字符集表里面的编码的16进制数字)。
此类中的方法对应Javascript中的escape()函数和unescape()函数。

1.8、URL工具-URLUtil

URL(Uniform Resource Locator)中文名为统一资源定位符,有时也被俗称为网页地址。
表示为互联网上的资源,如网页或者FTP地址。
在Java中,也可以利用URL表示Classpath中的资源(Resource)地址。

•URLUtil.normalize 标准化化URL链接。
对付不带http://头的地址做大略补全。

String url = "http://www.hutool.cn//aaa/bbb";// 结果为:http://www.hutool.cn/aaa/bbbString normalize = URLUtil.normalize(url);url = "http://www.hutool.cn//aaa/\\bbb?a=1&b=2";// 结果为:http://www.hutool.cn/aaa/bbb?a=1&b=2normalize = URLUtil.normalize(url);

•URLUtil.encode 封装URLEncoder.encode,将须要转换的内容(ASCII码形式之外的内容),用十六进制表示法转换出来,并在之前加上%开头。

String body = "366466 - 副本.jpg";// 结果为:366466%20-%20%E5%89%AF%E6%9C%AC.jpgString encode = URLUtil.encode(body);1.9、列举工具-EnumUtil

列举(enum)算一种“语法糖”,是指一个经由排序的、被打包成一个单一实体的项列表。
一个列举的实例可以利用列举项列表中任意单一项的值。
列举在各个措辞当中都有着广泛的运用,常日用来表示诸如颜色、办法、种别、状态等等数目有限、形式离散、表达又极为明确的量。
Java从JDK5开始,引入了对列举的支持。

//定义列举 public enum TestEnum{ TEST1("type1"), TEST2("type2"), TEST3("type3"); private TestEnum(String type) { this.type = type; } private String type; public String getType() { return this.type; } }// 获取列举类中所有列举工具的name列表List<String> names = EnumUtil.getNames(TestEnum.class); //结果:[TEST1, TEST2, TEST3]// 得到列举类中各列举工具下指定字段的值List<Object> types = EnumUtil.getFieldValues(TestEnum.class, "type"); //结果:[type1, type2, type3]1.10、数字工具-NumberUtil

数字工具针对数学运举措看成工具性封装

// 格式化为指定字符串long c = 299792458;//光速String format = NumberUtil.decimalFormat(",###", c);//299,792,4581.11、数组工具-ArrayUtil

数组工具类紧张针对原始类型数组和泛型数组干系方案进行封装

// 数组判空int[] a = {}; int[] b = null; ArrayUtil.isEmpty(a); ArrayUtil.isEmpty(b);1.12、随机工具-RandomUtil

RandomUtil紧张针对JDK中Random工具做封装,严格来说,Java产生的随机数都是伪随机数,因此Hutool封装后产生的随机结果也是伪随机结果。
不过这种随机结果对付大多数情形已经够用。

// 例如我们想产生一个[10, 100)的随机数,则:int c = RandomUtil.randomInt(10, 100);1.13、唯一ID工具-IdUtil

在分布式环境中,唯一ID天生运用十分广泛,天生方法也多种多样,Hutool针对一些常用天生策略做了大略封装。
包括UUID、ObjectId(MongoDB)、Snowflake(Twitter)

// 天生的UUID是带-的字符串,类似于:a5c8a5e8-df2b-4706-bea4-08d0939410e3String uuid = IdUtil.randomUUID();// 天生的是不带-的字符串,类似于:b17f24ff026d40949c85a24f4f375d42String simpleUUID = IdUtil.simpleUUID();1.14、正则工具-ReUtil

在文本处理中,正则表达式险些是全能的,但是Java的正则表达式有时候处理一些事情还是有些繁琐

// 给定字符串是否匹配给定正则String content = "ZZZaaabbbccc中文1234";boolean isMatch = ReUtil.isMatch("\\w+[\u4E00-\u9FFF]+\\d+", content);Assert.assertTrue(isMatch);1.15、身份证工具-IdcardUtil

支持大陆15位、18位身份证,港澳台10位身份证

String ID_18 = "321083197812162119";String ID_15 = "150102880730303";//是否有效boolean valid = IdcardUtil.isValidCard(ID_18);boolean valid15 = IdcardUtil.isValidCard(ID_15);//转换String convert15To18 = IdcardUtil.convert15To18(ID_15);//年事DateTime date = DateUtil.parse("2017-04-10"); int age = IdcardUtil.getAgeByIdCard(ID_18, date);int age2 = IdcardUtil.getAgeByIdCard(ID_15, date);//生日String birth = IdcardUtil.getBirthByIdCard(ID_18);String birth2 = IdcardUtil.getBirthByIdCard(ID_15);//省份String province = IdcardUtil.getProvinceByIdCard(ID_18);String province2 = IdcardUtil.getProvinceByIdCard(ID_15);1.16、信息脱敏工具-DesensitizedUtil

在数据处理或洗濯中,可能涉及到很多隐私信息的脱敏事情,因此Hutool针对常用的信息封装了一些脱敏方法。

// 以身份证号码为例:51XDesensitizedUtil.idCardNum("51343620000320711X", 1, 2);1.17、社会信用代码工具-CreditCodeUtil

法人和其他组织统一社会信用代码制度,相称于让法人和其他组织拥有了一个全国统一的“身份证号”,由一下五部分组成: 第一部分:登记管理部门代码1位 (数字或大写英笔墨母) 第二部分:机构种别代码1位 (数字或大写英笔墨母) 第三部分:登记管理机关行政区划码6位 (数字) 第四部分:主体标识码(组织机构代码)9位 (数字或大写英笔墨母) 第五部分:校验码1位 (数字或大写英笔墨母)

// 校验是否为社会信用代码String testCreditCode = "91310110666007217T";// trueCreditCodeUtil.isCreditCode(testCreditCode);1.18、字段验证器-Validator

验证给定字符串是否知足指定条件,一样平常用在表单字段验证里。

// 验证是否为邮箱boolean isEmail = Validator.isEmail("loolly@gmail.com")// 如无法知足需求,可通过该正则验证Validator.isMactchRegex("须要验证字段的正则表达式", "被验证内容")1.19、Bean工具-BeanUtil

Bean工具类紧张是针对这些setXXX和getXXX方法进行操作,比如将Bean工具转为Map等等

// 利用Map添补beanHashMap<String, Object> map = CollUtil.newHashMap();map.put("name", "Joe");map.put("age", 12);map.put("openId", "DFDFSDFWERWER");SubPerson person = BeanUtil.fillBeanWithMap(map, new SubPerson(), false);1.20、凑集工具-CollUtil

这个工具紧张增加了对数组、凑集类的操作。

// 将凑集转换为字符串String[] col= new String[]{"a","b","c","d","e"};List<String> colList = CollUtil.newArrayList(col);String str = CollUtil.join(colList, "#"); //str -> a#b#c#d#e1.21、列表工具-ListUtil

List在凑集中中利用最为频繁,因此新版本的Hutool中针对List单独封装了工具方法。

// 列表截取final List<Integer> of = ListUtil.of(1, 2, 3, 4);// [3, 4]final List<Integer> sub = ListUtil.sub(of, 2, 4);// 对子列表操作不影响原列表sub.remove(0);1.22、Unicode编码转换工具-UnicodeUtil

此工具紧张针对类似于\\u4e2d\\u6587这类Unicode字符做一些分外转换。

// 字符串转Unicode 第二个参数true表示跳过ASCII字符(只跳过可见字符)String s = UnicodeUtil.toUnicode("aaa123中文", true); //结果aaa123\\u4e2d\\u6587// Unicode转字符串String res = UnicodeUtil.toString("aaa\\U4e2d\\u6587\\u111\\urtyu\\u0026"); //结果aaa中文\\u111\\urtyu&1.23、Map工具-MapUtil

MapUtil是针对Map的逐一列工具方法的封装,包括getXXX的快捷值转换方法。

// reverse Map的键和值互换Map<String, String> map = MapUtil.newHashMap(); map.put("a", "1"); map.put("b", "2"); map.put("c", "3"); map.put("d", "4");Map<String, String> map2 = MapUtil.reverse(map);

结果为:

{ "1": "a", "2": "b", "3": "c", "4": "d",}1.24、Base64编码解码

Base64编码是用64(2的6次方)个ASCII字符来表示256(2的8次方)个ASCII字符,也便是三位二进制数组经由编码后变为四位的ASCII字符显示,长度比原来增加1/3。

String a = "伦家是一个非常长的字符串";// 5Lym5a625piv5LiA5Liq6Z2e5bi46ZW/55qE5a2X56ym5LiyString encode = Base64.encode(a);// 还原为aString decodeStr = Base64.decodeStr(encode);1.25、数学干系-MathUtil

此工具是NumberUtil的一个补充,NumberUtil倾向于大略数学打算的封装,MathUtil倾向繁芜数学打算。

1.26、图片工具-ImgUtil

针对awt中图片处理进行封装,这些封装包括:缩放、裁剪、转为黑白、加水印等操作。

// 图片类型转换png->jpgImgUtil.convert(FileUtil.file("e:/test2.png"), FileUtil.file("e:/test2Convert.jpg"));// 彩色转黑白ImgUtil.gray(FileUtil.file("d:/logo.png"), FileUtil.file("d:/result.png"));// 添加笔墨水印ImgUtil.pressText( FileUtil.file("e:/pic/face.jpg"), FileUtil.file("e:/pic/test2_result.png"), "版权所有", Color.WHITE, //笔墨 new Font("黑体", Font.BOLD, 100), //字体 0, //x坐标改动值。
默认在中间,偏移量相对付中间偏移 0, //y坐标改动值。
默认在中间,偏移量相对付中间偏移 0.8f//透明度:alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字 );
1.27、网络工具-NetUtil

在日常开拓中,网络连接这块儿必不可少。
日常用到的一些功能,隐蔽掉部分IP地址、绝对相对路径的转换等等。

String ip= "127.0.0.1";long iplong = 2130706433L;// 根据long值获取ip v4地址String ip= NetUtil.longToIpv4(iplong);// 根据ip地址打算出long型的数据long ip= NetUtil.ipv4ToLong(ip);// 检测本地端口可用性boolean result= NetUtil.isUsableLocalPort(6379);// 是否为有效的端口boolean result= NetUtil.isValidPort(6379);// 隐蔽掉IP地址String result =NetUtil.hideIpPart(ip);2、JSON2.1、JSON工具-JSONUtil

针对JSONObject和JSONArray的静态快捷方法凑集

// JSON字符串解析String html = "{\"name\":\"Something must have been changed since you leave\"}";JSONObject jsonObject = JSONUtil.parseObj(html);jsonObject.getStr("name");// XML字符串转JSONString s = "<sfzh>123</sfzh><sfz>456</sfz><name>aa</name><gender>1</gender>"; JSONObject json = JSONUtil.parseFromXml(s); json.get("sfzh"); json.get("name");// JSON转XMLfinal JSONObject put = JSONUtil.createObj().set("aaa", "你好").set("键2", "test"); // <aaa>你好</aaa><键2>test</键2> final String s = JSONUtil.toXmlStr(put);// JSON转BeanString json = "{\"ADT\":[[{\"BookingCode\":[\"N\",\"N\"]}]]}"; Price price = JSONUtil.toBean(json, Price.class); price.getADT().get(0).get(0).getBookingCode().get(0);3、加密解密3.1、加密解密工具-SecureUtil

SecureUtil紧张针对常用加密算法构建快捷办法,还有供应一些密钥天生的快捷工具方法。

// AES对称加解密String content = "test中文";// 随机天生密钥byte[] key = SecureUtil.generateKey(SymmetricAlgorithm.AES.getValue()).getEncoded();// 构建AES aes = SecureUtil.aes(key);// 加密byte[] encrypt = aes.encrypt(content);// 解密byte[] decrypt = aes.decrypt(encrypt);// 加密为16进制表示String encryptHex = aes.encryptHex(content);// 解密为字符串String decryptStr = aes.decryptStr(encryptHex, CharsetUtil.CHARSET_UTF_8);4、HTTP客户端4.1、Http客户端工具类-HttpUtil

基于JDK的HttpUrlConnection封装完成,完全支持https、代理和文件上传、以及URL参数编解码等。

GET要求栗子:

// 最大略的HTTP要求,可以自动通过header等信息判断编码,不区分HTTP和HTTPSString result1= HttpUtil.get("https://www.baidu.com");// 当无法识别页面编码的时候,可以自定义要求页面的编码String result2= HttpUtil.get("https://www.baidu.com", CharsetUtil.CHARSET_UTF_8);//可以单独传入http参数,这样参数会自动做URL编码,拼接在URL中HashMap<String, Object> paramMap = new HashMap<>();paramMap.put("city", "北京");String result3= HttpUtil.get("https://www.baidu.com", paramMap);

POST要求栗子:

HashMap<String, Object> paramMap = new HashMap<>();paramMap.put("city", "北京");String result= HttpUtil.post("https://www.baidu.com", paramMap);

文件上传栗子:

HashMap<String, Object> paramMap = new HashMap<>();//文件上传只需将参数中的键指定(默认file),值设为文件工具即可,对付利用者来说,文件上传与普通表单提交并无差异paramMap.put("file", FileUtil.file("D:\\face.jpg"));String result= HttpUtil.post("https://www.baidu.com", paramMap);4.2、HTML工具类-HtmlUtil

如我们在利用爬虫爬取HTML页面后,须要对返回页面的HTML内容做一定处理,比如去掉指定标签(例如广告栏等)、去除JS、去掉样式等等,这些操作都可以利用HtmlUtil完成。

// 转义HTML分外字符String html = "<html><body>123'123'</body></html>";// 结果为:<html><body>123'123'</body></html>String escape = HtmlUtil.escape(html);// 还原被转义的HTML分外字符String escape = "<html><body>123'123'</body></html>"; // 结果为:<html><body>123'123'</body></html> String unescape = HtmlUtil.unescape(escape);// 打消指定HTML标签和被标签包围的内容String str = "pre<img src=\"xxx/dfdsfds/test.jpg\">";// 结果为:pre String result = HtmlUtil.removeHtmlTag(str, "img");// 打消所有HTML标签,但是保留标签内的内容 String str = "pre<div class=\"test_div\">\r\n\t\tdfdsfdsfdsf\r\n</div><div class=\"test_div\">BBBB</div>"; // 结果为:pre\r\n\t\tdfdsfdsfdsf\r\nBBBB String result = HtmlUtil.cleanHtmlTag(str);// 打消指定HTML标签,不包括内容String str = "pre<div class=\"test_div\">abc</div>"; // 结果为:preabc String result = HtmlUtil.unwrapHtmlTag(str, "div");// 过滤HTML文本,防止XSS攻击String html = "<alert></alert>"; // 结果为:"" String filter = HtmlUtil.filter(html);5、扩展工具集5.1、拼音工具-PinyinUtil

引入拼音库(TinyPinyin、JPinyin、Pinyin4j)个中任意一个引擎,从而实现获取汉语拼音、拼音首字母

// 获取拼音:"ni hao" String pinyin = PinyinUtil.getPinyin("你好", " "); // 获取拼音首字母:"h, s, d, y, g"String result = PinyinUtil.getFirstLetter("H是第一个", ", ");5.2、Emoji工具-EmojiUtil

引入表情依赖,实现表情转义、表情转html、转义的别名转表情

<!-- 表情依赖 --><dependency> <groupId>com.vdurmont</groupId> <artifactId>emoji-java</artifactId> <version>4.0.0</version></dependency>

// 转义Emoji字符String alias = EmojiUtil.toAlias("");//:smile:// 将转义的别名转为Emoji字符String emoji = EmojiUtil.toUnicode(":smile:");//// 将字符串中的Unicode Emoji字符转换为HTML表现形式String alias = EmojiUtil.toHtml("");//5.3、二维码工具-QrCodeUtil

引入zxing库依赖(理论上你引入的版本应与此版本同等或比这个版本新),实现二维码的天生(二维码可附带logo图标)以及识别二维码

<!-- zxing库依赖 --><dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version>3.3.3</version></dependency>

// 自定义参数天生指定url对应的二维码到文件QrConfig config = new QrConfig(300, 300);// 设置边距,既二维码和背景之间的边距config.setMargin(3);// 设置前景色,既二维码颜色(青色)config.setForeColor(Color.CYAN.getRGB());// 设置背景色(灰色)config.setBackColor(Color.GRAY.getRGB());// 天生二维码到文件,也可以到流QrCodeUtil.generate("http://hutool.cn/", config, FileUtil.file("e:/qrcode.jpg"));// 识别二维码(decode -> "http://hutool.cn/" )String decode = QrCodeUtil.decode(FileUtil.file("d:/qrcode.jpg"));5.4、邮件工具-MailUtil

Hutool对所有第三方都是可选依赖,因此在利用MailUtil时须要自行引入第三方依赖。
支持群发、带附件、自定义邮件做事器

<!-- java-mail依赖 --><!-- 解释 com.sun.mail是javax.mail升级后的版本,新版本包名做了变更。
--><dependency> <groupId>com.sun.mail</groupId> <artifactId>javax.mail</artifactId> <version>1.6.2</version></dependency>

// 发送普通文本邮件,末了一个参数可选是否添加多个附件MailUtil.send("hutool@foxmail.com", "测试", "邮件来自Hutool测试", false);// 发送HTML格式的邮件并附带附件,末了一个参数可选是否添加多个附件:MailUtil.send("hutool@foxmail.com", "测试", "<h1>邮件来自Hutool测试</h1>", true, FileUtil.file("d:/aaa.xml"));// 群发邮件,可选HTML或普通文本,可选多个附件:ArrayList<String> tos = CollUtil.newArrayList( "person1@bbb.com", "person2@bbb.com", "person3@bbb.com", "person4@bbb.com"); MailUtil.send(tos, "测试", "邮件来自Hutool群发测试", false);

官方文档: https://www.hutool.cn/docs/#/

Github地址: https://github.com/dromara/hutool

Gitee地址: https://gitee.com/dromara/hutool

作者:京东零售 马宏伟

来源:京东云开拓者社区 转载请注明来源

标签:

相关文章

一元街,探寻城市角落的温馨与风情

一元街,位于我国某座繁华都市的腹地,是一条充满生活气息的街道。这里店铺林立,美食众多,是市民休闲娱乐的好去处。近年来,一元街逐渐成...

Web前端 2025-01-01 阅读0 评论0

Zen的智慧,探寻内心平静之路

在纷繁复杂的世界中,人们常常感到压力重重,内心充满焦虑。而Zen,作为一种源自东方的哲学思想,强调内心的平静与自在。本文将从Zen...

Web前端 2025-01-01 阅读0 评论0

Z5c,引领未来智能生活的新篇章

随着科技的飞速发展,智能设备逐渐走进我们的生活,为我们的生活带来便利。Z5c作为一款备受关注的智能产品,凭借其卓越的性能和独特的设...

Web前端 2025-01-01 阅读0 评论0