java常用工具
1.Lombok
1.1坐标
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.18</version> <scope>provided</scope> </dependency>
1.2注解
以下注解都使用在类上,用法如下:
注解 | 说明 |
@Getter | 生成get方法 |
@Setter | 生成set方法 |
@ToString | 生成toString方法 |
@Data |
生成get、set、toString、equals等方法 |
@NoArgsConstructor | 生成无参构造 |
@AllArgsConstructor | 生成全参构造器 |
@Accessors(chain = true) |
set方法是否开启链式调用,为true时开启 |
@Slf4j |
注解在类,生成log变量,严格意义来说是常量 |
1.3idea配置
在idea中安装插件,
配置注解生效
2.Hutool
官网:https://www.hutool.cn/docs/#/
2.1坐标
<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.3.9</version> </dependency>
2.2Convert类型转换
1)Integer转String
Integer a=1; String str = Convert.toStr(a);
2)String日期转Date
String time1="2020-05-12"; String time2="2020/06/15 00:20:20"; Date date = Convert.toDate(time1); Date date2 = Convert.toDate(time2);
字符串日期在转的时候,并没有指定格式,但是可以快速的转换。
3)数组转集合
String arr[]={"1","233","张三"}; List<?> list = Convert.toList(arr);
2.3DateUitl(日期时间)
1)获取当前的时间date,格式:yyyy-MM-dd HH:mm:ss
Date date = DateUtil.date(); Date date2 = DateUtil.date(Calendar.getInstance()); Date date3 = DateUtil.date(System.currentTimeMillis());
以上三种方式都可以获取格式化的date时间
2)获取当前时间的字符串
//当前时间字符串,格式:yyyy-MM-dd HH:mm:ss String now = DateUtil.now(); //当前日期字符串,格式:yyyy-MM-dd String today= DateUtil.today();
3)日期字符串转日期parse
String dateStr = "2017-03-01"; Date date = DateUtil.parse(dateStr); String dateStr2 = "2017/03/01 23:20:23"; Date date2 = DateUtil.parse(dateStr2);
Date date3 = DateUtil.parse(dateStr2, "yyyy-MM-dd");
4)格式化日期为字符串format
Date date = DateUtil.date(); String format = DateUtil.format(date, "yyyy/MM/dd");//结果:2020/07/16 String formatDate = DateUtil.formatDate(date);//结果:2020-07-16 String formatDateTime = DateUtil.formatDateTime(date);//结果:2020-07-16 20:22:54 String formatTime = DateUtil.formatTime(date);//结果:20:22:54
5)获取date的一部分
Date date = DateUtil.date(); //获得年的部分 int year = DateUtil.year(date); //获得月份,从0开始计数 int month = DateUtil.month(date)+1;
6)获取某天/某月的开始或结束时间
String dateStr = "2017-03-01"; Date date = DateUtil.parse(dateStr); //一天的开始,结果:2017-03-01 00:00:00 Date beginOfDay = DateUtil.beginOfDay(date); //一天的结束,结果:2017-03-01 23:59:59 Date endOfDay = DateUtil.endOfDay(date); //一月的开始,结果:2017-03-01 00:00:00 Date beginOfMonth = DateUtil.beginOfMonth(date); //一月的结束,结果:2017-03-31 23:59:59 Date endOfMonth = DateUtil.endOfMonth(date);
7)时间偏移(向前或向后)
String dateStr = "2017-03-01 22:33:23"; Date date = DateUtil.parse(dateStr); //获取三个小时前的时间,结果:2017-03-01 19:33:23 Date newDate = DateUtil.offsetHour(date, -3); //获取三天后的时间,结果:2017-03-04 22:33:23 Date newDate2 = DateUtil.offsetDay(date, 3); //获取三天前的时间,结果:2017-03-04 22:33:23 Date newDate3 = DateUtil.offsetDay(date, -3); //昨天 Date yesterday = DateUtil.yesterday(); //明天 Date tomorrow = DateUtil.tomorrow(); //上周 Date Date = DateUtil.lastWeek(); //下周 Date Date1 = DateUtil.nextWeek(); //上个月 Date Date2 = DateUtil.lastMonth(); //下个月 Date Date3 = DateUtil.nextMonth();
8)日期时间差between
String dateStr1 = "2017-03-01 22:33:23"; Date date1 = DateUtil.parse(dateStr1); String dateStr2 = "2017-05-01 23:33:23"; Date date2 = DateUtil.parse(dateStr2); String dateStr3 = "2017-03-02 20:23:35"; Date date3 = DateUtil.parse(dateStr3); //两个时间段相差的天数 long betweenDay = DateUtil.between(date1, date2, DateUnit.DAY); //两个时间段相差的小时 long betweenHour = DateUtil.between(date1, date3, DateUnit.HOUR); //格式化时间差,精确到分 String s = DateUtil.formatBetween(betweenDay, BetweenFormater.Level.MINUTE);
9)其他
//年龄 int age = DateUtil.ageOfNow("1990-01-30"); //是否闰年 boolean leapYear = DateUtil.isLeapYear(2017);
2.4StrUtil(字符串工具)
1)isBlank、isNotBlank
isBlank判断字符串是否为NULL或空串(不可见字符也算做空)是则返回true,否则返回false。isNotBlank相反。
String s=null; String s1=""; boolean b3 = StrUtil.isNotBlank(s);//false boolean b4 = StrUtil.isBlank(s1);//true
isEmpty
、isNotEmpty也是判断字符串是否为空的,分别对应isBlank、isNotBlank,只是它不会去判断不可见字符。
2)hasBlank、hasEmpty
hasBlank与isBlank用法相同,不同点是它是来判断字符串序列的,如字符串数组。普通的字符串也是可以判断的。
String s=null; String s1=""; String add[]={"a","b",""}; boolean b = StrUtil.hasBlank(s);//true boolean b1 = StrUtil.hasBlank(s1);//true boolean b2 = StrUtil.hasBlank(add);//true
3)removePrefix、removePrefix
作用是去掉字符的前缀和后缀。removeSuffixIgnoreCase和removePrefixIgnoreCase是其对应的忽略大小写的方法。
String f="abc.png"; //去掉图片名的后缀 String suffix = StrUtil.removePrefix(f, ".png");
4)sub
字符串的截取,优势在于索引越界也不会抛异常,索引也支持负数,索引位置可以自动修正。
String str = "abcdefghfs"; String strSub1 = StrUtil.sub(str, 2, 3); // c String strSub2 = StrUtil.sub(str, 3, 2); //c,原因是它可以把这个错误的索引修改为2,3 String strSub3 = StrUtil.sub(str, 2, -3); //cdefg String strSub4 = StrUtil.sub(str, 4, -1); //efghf
5)format
字符串模板代替字符串拼接
//定义模板,类似于slf4j String template = "{}爱你,就像老鼠爱{}"; //使用模板,代替字符串拼接 String str = StrUtil.format(template, "我", "大米"); //我爱你,就像老鼠爱大米
2.5SecureUtil(加密工具)
1)md5加密
String aa="123456"; String s = SecureUtil.md5(aa);
2)生成不含-的UUID
String s = SecureUtil.simpleUUID();
2.6SystemUtil(系统信息)
//获取系统信息,包含系统版本等 OsInfo osInfo = SystemUtil.getOsInfo(); //获取主机网络地址信息,包含主机名和ip HostInfo hostInfo = SystemUtil.getHostInfo();
2.7BeanUtil(类的操作)
2.7.1把类复制给另一个类
不能改变一个类的属性但是右必须改变时,就可以使用类的复制,把一个类复制给一个新的类,对新的类进行操作,这样既不会影响原类的属性也达到了效果,代码如下:
Map map = new HashMap(); map.put("name", 111); Map map2 = new HashMap(); BeanUtil.copyProperties(map, map2);
3.fastjson
json就是一串字符串 只不过元素会使用特定的符号标注。{} 双括号表示对象 ,[] 中括号表示数组,"" 双引号内是属性或值。
3.1初始化对象
JSONObject json=new JSONObject(); json.put("name","李四"); json.put("age",20); System.out.println(json);//{"name":"李四","age":20}
3.2toJSONString
把对象转为json字符串。
1)语法1:把普通对象转为json字符串
JSON.toJSONString(Object);
示例:
Map<String,Object> map=new HashMap<>(); map.put("name","张三"); map.put("age",20); String s = JSON.toJSONString(map); System.out.println(map);//{name=张三, age=20} System.out.println(s);//{"name":"张三","age":20}
可以看到map转成了json类型的字符串,其他的类型也可以直接转换。.
2)语法2:把json对象转为json字符串
json.toJSONString()
示例:
JSONObject json=new JSONObject(); json.put("name","李四"); json.put("age",20); String s = json.toJSONString(); System.out.println(json);//{"name":"李四","age":20} System.out.println(s);//{"name":"李四","age":20}
虽然看起来打印的结果是一样的,但是一个是json字符串,一个是json对象。
3.3parseObject
把json字符串转为对象。
语法:
JSON.parseObject(jsonStr, Object.class);
示例:
String s = " {\"name\":\"张三\",\"age\":20}"; Map map = JSON.parseObject(s, Map.class); System.out.println(map);//{name=张三, age=20} System.out.println(s);//{"name":"张三","age":20}
根据3.1转换的字符串,把其还原到map,结果是正确的。
3.4toJSON
把对象转为JSON对象。
语法:
JSON.toJSON(Object);
示例:
Map<String,Object> map=new HashMap<>(); map.put("name","张三"); map.put("age",20); JSONObject s = (JSONObject) JSON.toJSON(map); System.out.println(map);//{name=张三, age=20} System.out.println(s);//{"name":"张三","age":20}
3.5getJSONArray
把json字符串转为json数组。
语法:
JSONArray arr = json.getJSONArray(key);
User实体类:
@Data @NoArgsConstructor @AllArgsConstructor public class User { private String name; private String phone; }
示例:
Map<String,Object> map=new HashMap<>(); ArrayList<User> list=new ArrayList(); list.add(new User("张三","123456")); list.add(new User("李四","456155")); list.add(new User("王五","893456")); map.put("user",list); map.put("time",new Date()); System.out.println(map);// JSONObject json = (JSONObject) JSON.toJSON(map); System.out.println(json); //把json字符串转为数组 JSONArray users = json.getJSONArray("user"); //遍历数组 for (int i = 0; i < users.size(); i++) {
JSONObject user = users.getJSONObject(i);
System.out.println(user);
System.out.println(user.get("name");
}