判断是否为空
给定指定字符串,如果是空,则返回true
,使用到hasBlank
和hasEmpty
方法。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进制的转换
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链接
对于不带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分为两个方法:
XmlUtil.readXML
读取XML文件XmlUtil.parseXml
解析XML字符串为Document对象写XML
XmlUtil.toStr
将XML文档转换为StringXmlUtil.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列表writeObjectAsXml
将可序列化的对象转换为XML写入文件,已经存在的文件将被覆盖。readObjectFromXml
从XML中读取对象。注意 这两个方法严重依赖JDK的
XMLEncoder
和XMLDecoder
,生成和解析必须成对存在(遵循固定格式),普通的XML转Bean会报错。
Xpath操作
更多Xpath操作:点击此处
举例xml文件
Success(成功)
ok
1490
885
1
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());
两个对象是否相等
需要满足:
obj1 == null && obj2 == null
obj1.equals(obj2)
才会返回true
String string1 = "1";
Integer integer1 = 1;
// false
System.out.println(ObjectUtil.equal(string1, integer1));
计算对象长度
其实本质就是调用不同对象的计算长度方法,支持的类型有:
List list = new ArrayList();
// 0
System.out.println(ObjectUtil.length(list));
判断是否包含元素
即为判断对象中是否包含元素
List list1 = new ArrayList();
list1.add(0);
// true
System.out.println(ObjectUtil.contains(list1, 0));
List list2 = new ArrayList();
// 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
二进制转intNumberUtil.binaryToLong
二进制转longNumberUtil.compare
比较两个值的大小NumberUtil.toStr
数字转字符串,自动并去除尾小数点儿后多余的0