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

智能推荐

Scala 数组、映射和集合+wordcount程序-程序员宅基地

文章浏览阅读74次。数组1、定长数组和变长数组package cn.gec.scala import scala.collection.mutable.ArrayBuffer object ArrayDemo { def main(args: Array[String]) { //初始化一个长度为8的定长数组,其所有元素均为0 val arr1 = n..._scala array[long] wordcount

代码:灰度重心法提取线激光条纹中心线(CPP+OpenCV)_灰度中心法-程序员宅基地

文章浏览阅读2.1k次。灰度重心法是根据每行光条纹横截面内的灰度分布特征逐行进行处理,通过在行坐标的方向上,逐行计算提取光条纹区域的灰度重心点,并将该点用来代表该截面的光条纹中心点位置,最后将所有中心点拟合形成光条纹中心线。灰度重心法计算光条纹中心点的公式(光条纹第v列的灰度重心坐标):图像包含U行、V列的图像中坐标(u, v)处的像素灰度值为I(u,v),其中u=1,2,3,…,U; v=1,2,3…,V。灰度重心法提取光条纹中心线时运算速度快,实时性好。但是易受图像中的噪点干扰,导致中心线坐标偏移。#include._灰度中心法

论文查重系统的比较和选择_千万级和亿级查重哪个好-程序员宅基地

文章浏览阅读2k次。又到了毕业季,一般学校都会对毕业生的论文进行查重检测,看看大家的重复率。这个对大家的毕业是十分重要的,如果查重不过,可能会被延期毕业。所以很多学生也会自己事先查重,然后自己多次修改,达到学校的要求。可是很多学生不知道如何选择检测系统,下面我就给大家介绍一下主流的几种系统: 1.万方检测,特点是检测结果粗放,不是很令人满意,但是价格足够便宜,非常适合大家前期修改论文。 _千万级和亿级查重哪个好

FX PLC-程序员宅基地

文章浏览阅读75次。该协议实际上适用于PLC编程端口以及 FX-232AW 模块的通信。通讯格式:命令 命令码 目标设备DEVICE READ CMD "0" X,Y,M,S,T,C,DDEVICE WRITE CMD "1" X,Y,M,S,T,C,DFORCE ON CMD " 7" X,Y,M,S,T,CFORCE OFF CMD "8" X,Y,M,S,T,C传输格式: R..._fxplc一次性最多读写多少字节

DOM与虚拟DOM_dom和虚拟dom-程序员宅基地

文章浏览阅读1.8k次,点赞4次,收藏9次。1. DOM(Document Object Model)2018年通用版本是 DOM 3DOM的作用:对Html文档进行增删改查DOM文档树:(Object =&amp;amp;amp;amp;gt;)祖先 Node =&amp;amp;amp;amp;gt;Document创建Html标签;Text 创建文本;Element 创建其他元素标签;Comment 创建注释…2. Node 接口2. 1 属性childNodes //获取的..._dom和虚拟dom

Kafka-生产者-分区器详解_kafka partitioner-程序员宅基地

文章浏览阅读3.6k次,点赞4次,收藏10次。注:本文源码解析基于Kafka2.1.0版本我们知道,Kafka中的每个Topic一般会分配N个Partition,那么生产者(Producer)在将消息记录(ProducerRecord)发送到某个Topic对应的Partition时采用何种策略呢?Kafka中采用了分区器(Partitioner)来为我们进行分区路由的操作。本文将详细讨论Kafka给我们提供的分区器实现DefaultPa..._kafka partitioner

随便推点

Petya勒索软件变种Nyetya全球爆发,思科Talos率先响应-程序员宅基地

文章浏览阅读102次。自2017年5月份经历勒索软件WannaCry的大规模爆发后,思科Talos团队在6月27日发现了最新的勒索软件变种,暂命名为Nyetya。目前已经在多个国家发现了这个勒索软件的感染事件,思科Talos团队正在积极分析并不断更新最新的防护信息。原文链接:http://blog.talosintelligence.com/2017/06/worldwid...

springboot项目中自定义注解的使用总结、java自定义注解实战(常用注解DEMO)_springboot自定义注解加载字段上怎么使用-程序员宅基地

文章浏览阅读2.4w次,点赞142次,收藏1k次。初学spring的时候使用注解总觉得使用注解很神奇,加一个注解就能实现想要的功能,很好奇,也想自己根据需要写一些自己实现的自定义注解。问题来了,自定义注解到底是什么?肯定会有人和我一样有这个疑惑,我根据自己的理解总结一下。看完下面的几个使用自定义注解的实战demo,小伙伴大概就懂怎么用了。其实注解一点也不神奇,注解就是一种标志,单独使用注解,就相当于在类、方法、参数和包上加上一个装饰,什么功能也没有,仅仅是一个标志,然后这个标志可以加上一些自己定义的参数。_springboot自定义注解加载字段上怎么使用

C3P0 APPARENT DEADLOCK_apparent deadlock creating emergency threads for u-程序员宅基地

文章浏览阅读4k次。C3P0 APPARENT DEADLOCK 问题_apparent deadlock creating emergency threads for unassigned pending task

POM的语法规则_pom.xml语法-程序员宅基地

文章浏览阅读2.1k次。一、POM简介pom作为项目对象模型,通过使用pom.xml来实现管理maven项目,主要描述了项目的如下部分:配置文件、开发者需要遵循的规则、缺陷管理系统、组织和licenses、项目的url、项目的依赖性和其它所有的项目相关因素。二、POM的语法规则一份比较全的pom.xml文件可以参考如下,通过它我们来对pom.xml中的语法规则进行说明。&lt;project&gt; &lt;..._pom.xml语法

查看kafka消费组及消费者ip命令_kafka查看消费者ip-程序员宅基地

文章浏览阅读9.8k次,点赞2次,收藏6次。查看消费组./kafka-consumer-groups.sh --bootstrap-server ip:port--list//查看组中消费者状态./kafka-consuemr-groups.sh --bootstrap-server ip:port--group 消费组名称--describe_kafka查看消费者ip

java使用zpl指令在Zebra打印机上打印条形码-程序员宅基地

文章浏览阅读1.8k次。参考文章:https://blog.csdn.net/scholar_man/article/details/78784163打印机使用的是斑马打印机条码样式工具类ZplPrinterimport org.springframework.context.EnvironmentAware;import org.springframework.context.annotation.Configuration;import org.springframework.core.env.Environme

推荐文章

热门文章

相关标签