HuTool 工具类详细介绍(3)

目录

工具类

字符串工具

16进制工具

URL工具

XML工具

XML与对象转换

对象工具

判断是否为空

反射

剪切板工具

命令行工具

数字工具


工具类

字符串工具

判断是否为空

给定指定字符串,如果是空,则返回true,使用到hasBlankhasEmpty方法。hasEmpty只判断是否为null或者是空字符串,hasBlank会把不可见的字符也算为空。

		String nullStr = null;
		// true
		System.out.println(StrUtil.hasBlank(nullStr));
		// true
		System.out.println(StrUtil.hasEmpty(nullStr));

删除前后缀

removePrefix为删除字符串前缀,removeSuffix为删除字符串后缀,经常用于去文件扩展名。

		String fileName = StrUtil.removeSuffix("HuTool学习.md", ".md"); 
		// HuTool学习
		System.out.println(fileName);
		String fileName1 = StrUtil.removePrefix("HuTool学习.md", "HuTool学习."); 
		// md
		System.out.println(fileName1);

截取字符串

String中就有截取字符串的方法,但是时常会越界,在这个工具类中,该方法会自动判断,支持负数,(与python相同),第二个位置与第一个位置搞反了的话,也会自动识别更改。

		String str = "lolly1023";
		
		String strSub1 = StrUtil.sub(str, 0, 5); 
		// lolly
		System.out.println(strSub1);
		String strSub2 = StrUtil.sub(str, 0, -4);
		// lolly
		System.out.println(strSub2);
		String strSub3 = StrUtil.sub(str, 5, 0);
		// lolly
		System.out.println(strSub3);

格式化字符串

使用{}进行占位即可,然后使用format方法进行格式化

		// 使用{}占位
		String template = "{}+{}=2";
		// 1+1=2
		String str1 = StrUtil.format(template, "1", "1"); 
		System.out.println(str1);

16进制工具

16进制的转换

		String str = "测试16进制转换";

		String hex = HexUtil.encodeHexStr(str, CharsetUtil.CHARSET_UTF_8);
		// e6b58be8af953136e8bf9be588b6e8bdace68da2
		System.out.println(hex);

		String decodedStr = HexUtil.decodeHexStr(hex);
		// 测试16进制转换,解码后与str相同
		System.out.println(decodedStr);

URL工具

标准化URL链接

对于不带http://头的地址做简单补全。

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

XML工具

读取XML

读取XML分为两个方法:

  • XmlUtil.readXML 读取XML文件
  • XmlUtil.parseXml 解析XML字符串为Document对象

写XML

  • XmlUtil.toStr 将XML文档转换为String
  • XmlUtil.toFile 将XML文档写入到文件

创建XML

  • XmlUtil.createXml 创建XML文档, 创建的XML默认是utf8编码,修改编码的过程是在toStr和toFile方法里,既XML在转为文本的时候才定义编码。

XML操作

通过以下工具方法,可以完成基本的节点读取操作。

  • XmlUtil.cleanInvalid 除XML文本中的无效字符
  • XmlUtil.getElements 根据节点名获得子节点列表
  • XmlUtil.getElement 根据节点名获得第一个子节点
  • XmlUtil.elementText 根据节点名获得第一个子节点
  • XmlUtil.transElements 将NodeList转换为Element列表

XML与对象转换

  • writeObjectAsXml 将可序列化的对象转换为XML写入文件,已经存在的文件将被覆盖。
  • readObjectFromXml 从XML中读取对象。

注意 这两个方法严重依赖JDK的XMLEncoderXMLDecoder,生成和解析必须成对存在(遵循固定格式),普通的XML转Bean会报错。

Xpath操作

更多Xpath操作:点击此处
举例xml文件

<?xml version="1.0" encoding="utf-8"?>

<returnsms> 
  <returnstatus>Success(成功)</returnstatus>  
  <message>ok</message>  
  <remainpoint>1490</remainpoint>  
  <taskID>885</taskID>  
  <successCounts>1</successCounts> 
</returnsms>

java代码

		File xmlFile = new File("/Study/HuToolTest/src/main/java/com/rj/bd/HuToolTest/UTilTest/URLUtil/Test.xml");
		Document docResult=XmlUtil.readXML(xmlFile);
		Object value = XmlUtil.getByXPath("//returnsms/message", docResult, XPathConstants.STRING);
		// ok
		System.out.println(value.toString());

对象工具

两个对象是否相等

需要满足:

  1. obj1 == null && obj2 == null
  2. obj1.equals(obj2)

才会返回true

		String string1 = "1";
		Integer integer1 = 1;
		// false
		System.out.println(ObjectUtil.equal(string1, integer1));

计算对象长度

其实本质就是调用不同对象的计算长度方法,支持的类型有:

  • CharSequence
  • Collection
  • Map
  • Iterator
  • Enumeration
  • Array
		List<Integer> list = new ArrayList<Integer>();
		// 0
		System.out.println(ObjectUtil.length(list));

判断是否包含元素

即为判断对象中是否包含元素

		List<Integer> list1 = new ArrayList<Integer>();
		list1.add(0);
		// true
		System.out.println(ObjectUtil.contains(list1, 0));

判断是否为空

		List<Integer> list2 = new ArrayList<Integer>();
		// false
		System.out.println(ObjectUtil.isNull(list2));
		// true
		System.out.println(ObjectUtil.isNotNull(list2));

克隆

  • ObjectUtil.clone克隆对象,如果对象实现Cloneable接口,调用其clone方法,如果实现Serializable接口,执行深度克隆,否则返回null

  • ObjectUtil.cloneIfPossible 返回克隆后的对象,如果克隆失败,返回原对象

  • ObjectUtil.cloneByStream 序列化后拷贝流的方式克隆,对象必须实现Serializable接口

序列化与反序列化

  • serialize 序列化,调用JDK序列化
  • unserialize 反序列化,调用JDK

判断基本类型

如果该对象是基本类型,则返回true,反之返回false。

		int i = 0;
		// true
		System.out.println(ObjectUtil.isBasicType(i));

反射

获取某类的全部方法

		// 获取类中的全部方法
		Method[] methods = ReflectUtil.getMethods(Test.class);

获取某类的某个方法

		// 获取类中的某个方法
		Method method = ReflectUtil.getMethod(Test.class, "getID");

获取某类的构造方法

		// 获取某类的构造方法
		ReflectUtil.newInstance(Test.class);

执行方法

public class TestClass {
	public String print(String string) {
		return string;
	}
}	

测试类

		TestClass testClass = new TestClass();
		// lolly1023
		ReflectUtil.invoke(testClass, "print", "lolly1023");

剪切板工具

获取剪切板内容及修改剪切板内容

		// 获取系统剪切板内容
		Clipboard copy = ClipboardUtil.getClipboard();
		// 设置剪切板内容,图片的话使用setImage
		ClipboardUtil.setStr("123");
		// 获取剪切板内容:123,图片的话使用getImage
		System.out.println(ClipboardUtil.getStr());

命令行工具

通过Java代码执行命令行命令,在Wubdows下是cmd,在Linux下是shell命令

执行命令

		// cmd下输入ipconfig为网卡信息
		String str = RuntimeUtil.execForStr("ipconfig");
		// 输出正常,为网卡信息
		System.out.println(str);

数字工具

加减乘除

  • NumberUtil.add 针对double类型做加法
  • NumberUtil.sub 针对double类型做减法
  • NumberUtil.mul 针对double类型做乘法
  • NumberUtil.div 针对double类型做除法,并提供重载方法用于规定除不尽的情况下保留小数位数和舍弃方式。

以上的方法都会将double转为BigDecimal,解决了精确问题。

保留小数

		double te1=123456.123456;
		double te2=123456.123456;
		// 第二个参数为保留几位小数
		// 123456.1
		Console.log(NumberUtil.round(te1,1));
		// 123456.123
		Console.log(NumberUtil.round(te2,3));

四舍五入

		double te3=123456.123456;
		double te4=123456.128456;
		// 第二个参数为保留几位小数
		//123456.12
		Console.log(NumberUtil.roundStr(te3,2));
		//123456.13
		Console.log(NumberUtil.roundStr(te4,2));

格式化

		long c=299792458;//光速
		String format = NumberUtil.decimalFormat(",###", c);//299,792,458
		System.out.println(format);

常用的格式化方式

  • 0 -> 取一位整数
  • 0.00 -> 取一位整数和两位小数
  • 00.000 -> 取两位整数和三位小数
  • # -> 取所有整数部分
  • #.##% -> 以百分比方式计数,并取两位小数
  • #.#####E0 -> 显示为科学计数法,并取五位小数
  • ,### -> 每三位以逗号进行分隔,例如:299,792,458
  • 光速大小为每秒,###米 -> 将格式嵌入文本

更多格式化操作,点击处此

是否为数字

  • NumberUtil.isNumber 是否为数字
  • NumberUtil.isInteger 是否为整数
  • NumberUtil.isDouble 是否为浮点数
  • NumberUtil.isPrimes 是否为质数

随机数

第一个参数为最小值,第二个参数为最大值,第三个参数为长度。

		// 生成随机数,用int类型数组承载
		int[] array = NumberUtil.generateRandomNumber(0, 10, 8);
		System.out.println(Convert.toStr(array));
		// 生成随机数,用Integer类型数组承载
		Integer[] array2 = NumberUtil.generateBySet(0, 10, 8);
		System.out.println(Convert.toStr(array2));

有序整数列表

生成一个有序的int类型数组

		// 第一个参数为起点,第二个参数为终点
		int[] array3 = NumberUtil.range(2, 5);
		// [2, 3, 4, 5]
		System.out.println(Convert.toStr(array3));

其它

  • NumberUtil.factorial 阶乘
  • NumberUtil.sqrt 平方根
  • NumberUtil.divisor 最大公约数
  • NumberUtil.multiple 最小公倍数
  • NumberUtil.getBinaryStr 获得数字对应的二进制字符串
  • NumberUtil.binaryToInt 二进制转int
  • NumberUtil.binaryToLong 二进制转long
  • NumberUtil.compare 比较两个值的大小
  • NumberUtil.toStr 数字转字符串,自动并去除尾小数点儿后多余的0
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值