java开发神辅助--Hutool工具类库_strutil.contains-程序员宅基地

技术标签: java  

java开发神辅助--Hutool工具类库

 java

发布于 6月4日

java开发神辅助--Hutool工具类库

Hutool 简称糊涂工具
寓意追求“万事都作糊涂观,无所谓失,无所谓得
Hutool 轻量(不依赖任何jar包)、干练(工具类一个比一个香)
而且Hutool的官方文档也是解释的很清晰
下面小编向大家介绍一下Hutool的使用 相信你也会爱上他的

先上jar包下载地址

Hutool核心(Hutool-core)

本文主要介绍Hutool比较核心的内容

控制台打印封装 lang.Console

从此以后不用System.out.println打天下
Hutool对java的打印语句也做了封装 Console下的log 和error方法
log等同于System.out.println
error 等同于System.err.println
但是你要仅仅这么认为那就错了 Hutool对打印语句的封装不是仅仅把他封装成一个方法 同时支持了类似于Slf4j的字符串模板语法
比如 大家都熟知的 打印数组 如果用System.out.println的话显然打印不出我们想要的结果
但是log会自动将对象(包括数组)转为字符串形式
//利用静态导包来简化代码
String[] s= {"1","2","3"};
out.println(s);
Ljava.lang.String;@3f8f9dd6
log(s);
//[1, 2, 3]
//所以说如果你在项目中引用了Hutool工具库的话 你会选择log吗
//反正小编是爱不释手了

万能转换器 convert.Convert

Convert是小编最爱技术之一
解放双手感觉再一次啪啪的打到了脸上

常见类型转换

//转为字符串 toStr()
int i=1;
String str3 = toStr(i);
log(str3);//        1
double[] d= {1.0,2.0,3.0};
String str4 = toStr(d);
log(str4);//        [1.0, 2.0, 3.0]

//转为指定类型数组
String str5="12345";
//结果为Integer数组
Integer[] intArray = toIntArray(str5);
log(intArray);//        [12345]
long[] cstr = {1,2,3,4,5};
//结果为Integer数组
Integer[] intArray2 = toIntArray(cstr);
log(intArray2);//        [1, 2, 3, 4, 5]
    
//转换为集合
char[] charl= {'a','b','c','d'};
toList(charl).forEach(Console::log);
//        a    b    c    d
        
//转换为日期
String str6 = "2017-05-06";
Date value = Convert.toDate(str6);    

//当然了 如果你觉得上面这些对应的方法还是麻烦的话 可以用convert方法:
//集合转为字符串
convert(String.class,List.of(1,2,3,4));
//数组转为集合
int[] ic= {1,2,3,4};
convert(List.class,ic);

其他类型转换器

//泛型类型
//通过convert(TypeReference<T> reference, Object value)方法,
//自行new一个TypeReference对象可以对嵌套泛型进行类型转换。
//例如,我们想转换一个对象为List<String>类型,
//此时传入的标准Class就无法满足要求,此时我们可以这样:
Object[] ao = { "a", "你", "好", "", 1 };
List<String> listf = convert(new TypeReference<List<String>>() {}, ao);
        
//半角和全角转换
String sa = "123456789";
String ssbc = toSBC(sa);
//"123456789"
//半角->全角
String dbc = toDBC(ssbc);
//123456789
//全角->半角
        
//金额大小写转换digitToChinese
double dou = 67556.32;
String dig = digitToChinese(a);
log(dig);//    壹仟贰佰叁拾肆元整
    
//包装类与原始类型转换
//去包装
Class<?> wrapClass = Integer.class;
Class<?> unWraped = Convert.unWrap(wrapClass);
log(unWraped);//    int
//包装
Class<?> primitiveClass = long.class;
Class<?> wraped = Convert.wrap(primitiveClass);
log(wrapClass);//    class java.lang.Integer
    
//比较有趣的农历日期 ChineseDate
ChineseDate date = new ChineseDate(DateUtil.parseDate("2020-01-25"));
// 一月
log(date.getChineseMonth());
// 正月
log(date.getChineseMonthName());
// 初一
log(date.getChineseDay());
// 庚子
log(date.getCyclical());
// 鼠
log(date.getChineseZodiac());
// 春节
log(date.getFestivals());
// 庚子鼠年 正月初一
log(date.toString());

IO的相关处理

FileUtil 文件工具类

总体来说,FileUtil类包含以下几类操作工具:
文件操作:包括文件目录的新建、删除、复制、移动、改名等
文件判断:判断文件或目录是否非空,是否为目录,是否为文件等等。
绝对路径:针对ClassPath中的文件转换为绝对路径文件。
文件名:主文件名,扩展名的获取
  • 对文件本身的操作
exist 判断文件是否存在
getAbsolutePath获取绝对路径
getName获取文件名
extName 获取文件扩展名
ls 列出目录和文件
touch 创建文件,如果父目录不存在也自动创建
mkdir 创建目录,会递归创建每层目录
del 删除文件或目录(递归删除,不判断是否为空),这个方法相当于Linux的delete命令
copy 拷贝文件或目录
rename(File file, String newName, boolean isRetainExt, boolean isOverride)
修改文件或目录的文件名,不变更路径,只是简单修改文件名
重命名有两种模式:
isRetainExt为true时,保留原扩展名:
为false则相反
  • 对文件内容的操作:
/**
* 读操作:包括类似IoUtil中的getReader、readXXX操作 
* 写操作:包括getWriter和writeXXX操作
*/
getInputStream()    获得一个读入流对象
getOutputStream    获得一个输出流对象
getReader    获得一个带缓存的读入对象
getWriter    获得一个带缓存的写入对象
getPrintWriter(File file, String charset, boolean isAppend)
获得一个打印写入对象,可以有print
writeLines    将列表写入文件    
writeMap(Map<?,?> map, File file, Charset charset, String kvSeparator, boolean isAppend)
将Map写入文件,每个键值对为一行,一行中键与值之间使用kvSeparator分隔

FileReader、FileWriter 文件读取写入类

FileReader 和FileWriter 这两个类是Hutool为分清职责而创建的对文件读写操作类
官方说明 比较推荐用更方便的FileUtil 进行文件操作

文件读取-FileReader:

//创建方式:
FileUtil.touch("t.txt");
FileReader fileReader = new FileReader("t.txt");
FileReader fileReader3 = new FileReader(new File("t.txt"));
FileReader fileReader2 = FileReader.create(new File("t.txt"));
//第二个参数都可设置编码格式
//方法:
fileReader.readLines();//从文件中读取一行内容
fileReader.readString();//读取文件内容

文件写入-FileWriter:

//创建方式:
FileWriter fileWriter = new FileWriter("t.txt");
FileWriter fileWriter2 = new FileWriter(new File("t.txt"));
FileWriter fileWriter3 = FileWriter.create(new File("t.txt"));
//方法:
fileWriter.append("abc");//将字符串追加到文件中
fileWriter.appendLines(List.of(1,2,3));//将列表追加到文件中
fileWriter.write("abc");//将字符串写入覆盖到文件中
fileWriter.writeLines(List.of(1,2,3));//将列表覆盖到文件中

fileWriter.writeMap(map, kvSeparator, isAppend)
//将Map写入文件,每个键值对为一行,一行中键与值之间使用kvSeparator分隔 第三个参数设置是否追加

字符串的处理 util.StrUtil

由于字符串的处理比较多 小编只抽取一些比较典型的作为案例
大家可以参考文章最后的链接继续探索
  • 字符串的截取
//字符截取  sub
//与jdk中不同的是 改方法不会抛出异常 、-1代表最后一个字符、传参顺序不重要
//ps: 依旧是包含小值 不包含大值
String su="abcde";
log(StrUtil.sub(su,3,1));//bc
log(StrUtil.sub(su,2,-1));//cd
  • 用字符串模板代替字符串拼接
String format="{}我的月工资是:{}";
String format2 = StrUtil.format(format, "呵呵",100);
log(format2);
//听说是作者的最骄傲工程之一???  哈哈哈 厉害了
  • 对字符串 内容的判断:
//判断字符串是否为空或空格  是则返回true
//hasEmpty        只能判断是否为空或为null
boolean hasEmpty = StrUtil.hasEmpty(" ");
log(hasEmpty);//  false
//hasBlank        可判断是否为空或者不可见
boolean hasBlank = StrUtil.hasBlank(" ");
log(hasBlank);//true

boolean blank2 = StrUtil.containsBlank("1 2 3 4");//判断字符串中是否包含空
log(blank2);//true

String blank = StrUtil.cleanBlank("1 2 3 4");//清空字符串中空白字符
log(blank);//1234

boolean contains = StrUtil.contains("12345", "12");//判断指定字串或字符在字符串中是否出现过
log(contains);//true

String reverse = StrUtil.    reverse("12345");//翻转字符串
log(reverse);//54321
  • 计算两个字符串的相似度
double similar2 = StrUtil.similar("123", "234");
log(similar2);//0.6666666667
String similar = StrUtil.similar("123", "234",100);
//计算两个字符串的相似度百分比
log(similar);//66.66666667%
  • 获取Stringbuilder对象:
StringBuilder builder2 = StrUtil.builder();

集合相关

集合工具 collection.CollUtil

  • 集合的创建
//当然了 跟Guava中集合的创建类似
HashMap<String, String> hashMap = CollUtil.newHashMap();
HashSet<String> set = CollUtil.newHashSet();
ArrayList<String> arrayList = newArrayList();
//可以利用静态导包 减少代码
  • 集合转字符串 join
//集合转字符串
String string2 = CollUtil.join(List.of("a","b","c","d","e"), "#"); //string2 -> a#b#c#d#e
  • 两个集合 合并为map
    
//zip  将两个集合或者数组的元素一一对应
String[] string3 = new String[]{"a", "b", "c"};
Integer[] ints = new Integer[]{1, 2, 3};
Map<String, Integer> treeMap = zip(string3,ints);
System.out.println(treeMap);   // {a=1, b=2, c=3}

String string4 = "a,b,c";
String string5 = "1,2,3";
Map<String, String> map2 =CollUtil.zip(string4,string5, ",");
System.out.println(map2);   // {a=1, b=2, c=3}
  • 统计集合中元素个数 countMap
//countMap(Iterable<T> collection)
//根据集合返回一个元素计数的 Map
//所谓元素计数就是假如这个集合中某个元素出现了n次,那将这个元素做为key,n做为value
Map<Integer, Integer> map3 = CollUtil.countMap(List.of(1,2,3,4,2,3));
log(map3);//{1=1, 2=2, 3=2, 4=1}

列表工具 ListUtil

  • filter 过滤列表
List<String> list2 = ListUtil.toLinkedList("1", "2", "3");
List<String> filter = ListUtil.filter(list2, Str->"hehe"+Str);
log(filter);//[hehe1, hehe2, hehe3]
  • 获取满足指定规则所有的元素的位置:
List<String> list3 = ListUtil.toLinkedList("1", "2", "3", "4", "3", "2", "1");
int[] indexArray = ListUtil.indexOfAll(list3, "2"::equals);
// [1, 5]

Map工具 MapUtil

  • of 将多个键值对添加到map中
Map<Object, Object> map4 = MapUtil.of(new String[][] {
             {"1", "A"},
             {"2", "B"},
             {"3", "C"}
});
//{1=A, 2=B, 3=C}

BiMap 双向映射的Map

和Guava中的BiMap类似
BiMap<String, Integer> biMap = new BiMap<>(new HashMap<>());
biMap.put("aaa", 111); 
biMap.put("bbb", 222); 
// 111 
biMap.get("aaa"); 
// 222 
biMap.get("bbb"); 
// aaa 
biMap.getKey(111); 
// bbb 
biMap.getKey(222);

线程安全的HashSet-ConcurrentHashSet

使用方式跟普通的HashSet一样
Hutool只是借助Jdk中的ConcurrentHashMap封装了线程安全的ConcurrentHashSet

Hutool参考文档:

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/cxu123321/article/details/108617929

智能推荐

this与super的区别_this是不是可以取代super-程序员宅基地

文章浏览阅读1.7k次,点赞7次,收藏10次。1.this与super继承关系当子类创建对象后,该子类对象本身可以使用this来指代,而该对象当中的父类对象空间可以使用super来指代示例:所以继承关系图:2.this与super调用普通成员与构造方法调用普通成员this.成员变量 可以访问本类对象的成员变量super.成员变量 可以访问父类对象的非私有成员变量this.成员方法() 可以访问本类对象的成员方法..._this是不是可以取代super

Element tree树组件 鼠标双击事件_eltree双击展开-程序员宅基地

文章浏览阅读2.9k次。需求双击 tree上的子节点,把节点文字显示在输入框中(这里简化一下,双击 tree 显示文字即可,省略 $emit 那一步)注解:props 可以接收 defaultExpandAll(是否默认展开所有节点)效果如下:基本代码树组件代码<template> <el-tree id="tree" v-loading="treeDataLoading" node-key="id" :data="treeData" :default_eltree双击展开

Ubuntu12.04 VMware 9.0 主机为windows xp 安装VMware tools没有和主机共享的解决办法。-程序员宅基地

文章浏览阅读230次。本人最近在xp上装了个虚拟机 vmware 9.0 装的是 ubuntu12.04,当我要虚拟机和 xp 系统共享文件时,在 /mnt 下没有发现 hgfs。本人按照网上安装 vmware tools 方式安装了几遍,https://jingyan.baidu.com/article/1974b289b813dcf4b1f77411.html 例如这个。但是怎么样都没看到 /mnt

汇编开发(六):程序进阶-程序员宅基地

文章浏览阅读520次。1. 堆栈框架1). 栈参数之前使用寄存器传递参数,现在我们将使用运行栈在子程序中传递参数。堆栈框架(或激活记录)是为传递的参数,子程序返回地址,局部变量和已保存的寄存器预留的堆栈区域。栈框架的创建步骤:I. 如果有要传递的参数,则压入栈中。II. 调用子程序,使子程序返回地址被压入堆栈。III. 子程序开始执行时,EBP被压入栈中。IV. E...

MongoDB集群架构-程序员宅基地

文章浏览阅读1.2k次。一、MongoDB 复制集特性复制集群的架构 复制集群搭建 复制集群的选举配置1.复制集群的架构2.复制集群搭建基础示例2.复制集群搭建基础示例主节点配置dbpath=/data/mongo/masterport=27017fork=truelogpath=master.logreplSet=MyCluster从节点配置dbpath=/data/mongo/slaveport=27018fork=truelogpath=slave.l

Linux毕业设计:基于OpenCV和QT库实现的人脸识别考勤/门禁系统(arm嵌入式ubuntu)_基于opencv的人脸识别门禁-程序员宅基地

文章浏览阅读8.3k次,点赞5次,收藏140次。Linux上以opencv和qt库实现的人脸识别系统,可应用于考勤、门禁等场景,具有人脸录入、删除、人脸检测、识别、用户管理等完整功能。可运行于ARM嵌入式linux、ubuntu即纯软件、ARM+PC组合等多种方式,应用场景多样且易于移植各个平台。_基于opencv的人脸识别门禁

随便推点

Hooks与普通函数的区别_hooks与普通工具函数的区别-程序员宅基地

文章浏览阅读1.9k次。在自定义Hooks当中,数据被锁定在了Fiber当中,也就是说数据的共享范围是在当前组件节点中,相对于全局状态共享来说粒度会更细一些。当然我们如果想直接在全局共享数据的话,这种方案就不合适了,可能还需要配合一个全局的状态管理才行。还是那句话,在这里只是举一个例子,毕竟实际上适合的才是最好的。}官方提供的Hooks只应该在React函数组件/自定义Hooks内调用,而不应该在普通函数调用。自定义Hooks能够调用诸如useState、useRef等,普通函数则不能。由此可以通过内置的Hooks。_hooks与普通工具函数的区别

记一次Docker 的使用_docker 里的镜像忘记密码怎么办-程序员宅基地

文章浏览阅读1k次。1,docker ps 查看正在运行的容器2,docker ps –a 查看所有现存的容器。3,docker ps –s 查看容器以及占用大小4,docker start ID/NAME 启动容器5,docker stop ID/NAME 停止容器6,docker restart ID/NAME 重启容器7,docker logs ID/NAME 查看容器日志全部8,doc..._docker 里的镜像忘记密码怎么办

Qt Creator源码编译_qtcreator11.0 源码编译-程序员宅基地

文章浏览阅读626次。QtCreator 源码编译_qtcreator11.0 源码编译

Linux Centos系统安装并解压rar文件_centos 如何安装rar-程序员宅基地

文章浏览阅读554次。下载安装包wget --no-check-certificate https://www.rarlab.com/rar/rarlinux-x64-610b3.tar.gz编译安装make && make install解压命令unrar x aaa.rar_centos 如何安装rar

统计网站的用户访问量的实现-程序员宅基地

文章浏览阅读2.5w次,点赞4次,收藏35次。1、项目需求:一个IP一天内访问算是一次访问,统计该网站的用户访问量。2、实现思想:服务器启动的时候把数据库中的访问量进行缓存,用户访问的时候进行访问量的刷新,把访问信息存到集合中进行缓存,达到一定数量的时候要存入数据库中,服务器关闭的时候把未存入数据库中的访问量存入数据库中3、代码实现: //用来统计不同的URL对应的访问情况 private static List&lt;Map&l...

13-Oracle触发器(定义,管理及测试)_创建一个触发器,禁止在休息日改变雇员信息-程序员宅基地

文章浏览阅读694次。本章内容1.触发器概述2.DML触发器3.INSTEAD-OF触发器4.系统触发器5.变异表触发器6.触发器的管理_创建一个触发器,禁止在休息日改变雇员信息

推荐文章

热门文章

相关标签