Это 31-й день моего участия в августовском испытании обновлений. Узнайте подробности события:Испытание августовского обновления
В прошлой статье были представлены некоторые компоненты, представленные в проекте HuTool, но функций HuTool гораздо больше.Далее я представлю некоторые удобные инструменты, которые предоставляет нам HuTool.
Если вы не читали предыдущую статью, это не имеет значения, это не влияет на ваше понимание следующего содержания, но для того, чтобы позаботиться о студентах, непосредственно читающих вторую статью, необходимо ввести метод внедрения HuTool.
Добавьте следующее в зависимости pom.xml проекта:
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.0.7</version>
</dependency>
Если это не проект Maven, загрузите пакет jar с Baidu и импортируйте его.
StrUtil
Из названия должно быть понятно, что это класс инструментов для обработки строк.
О строках особо рассказывать нечего, давайте просто посмотрим, какие методы они нам предоставляют.
1. hasBlank, hasEmpty
Эти два метода используются для определения того, является ли строка пустой, см. следующий код:
@Test
//判断字符串是否为空
public void hasBlankOrhasEmptyTest(){
String str1 = " ";
String str2 = "";
System.out.println(StrUtil.hasBlank(str1));
System.out.println(StrUtil.hasBlank(str2));
System.out.println(StrUtil.hasEmpty(str1));
System.out.println(StrUtil.hasEmpty(str2));
}
результат операции:
true
true
false
true
Следует отметить, что хотя функции этих двух методов предназначены для определения того, является ли заданная строка пустой, метод hasEmpty может оценивать только нулевые и пустые строки (""), а метод hasBlank также будет оценивать невидимые символы. пустой. Например, в приведенной выше программе для str1 значением является невидимый символ (пробел), метод hasEmpty строка не пуста, а метод hasBlank считает строку пустой, а для str2 два метода не неоднозначный, Единообразно признается, что он пустой.
2. удалить префикс, удалить суффикс
Эти два метода используются для удаления указанного префикса и суффикса строки соответственно.
Посмотрите на код:
@Test
//去除字符串的指定前缀和后缀
public void removePrefixOrremoveSuffixTest(){
String str1 = "test.jpg";
//去除指定后缀
System.out.println(StrUtil.removeSuffix(str1,".jpg"));
//去除指定前缀
System.out.println(StrUtil.removePrefix(str1,"test"));
}
результат операции:
test
.jpg
3. суб
Этот метод улучшен по сравнению с методом subString, предоставляемым JDK. Помните, что делает метод subString JDK?
Он используется для перехвата строки и возврата соответствующей подстроки по заданному индексу.Поскольку с традиционным методом subString слишком много проблем, какие у вас вопросы? Посмотрите на код:
@Test
public void subTest(){
String str = "hello world";
System.out.println(str.substring(0,12));
}
В этой программе длина строки str равна 11, но когда длина строки перехватывается, она перехватывается до 12. Очевидно, что индекс выходит за пределы, но иногда мы можем легко сделать эту ошибку, но это не хороший способ. Для этого StrUtil предоставляет нам метод sub, который учитывает различные ситуации, которые необходимо учитывать, и обрабатывает их соответствующим образом.В то же время он также поддерживает отрицательные индексы, а -1 представляет последний символ.Это Python's стиле, автор должен быть фанатом Python.
код показывает, как показано ниже:
@Test
//截取字符串
//index从0开始计算,最后一个字符为-1
//如果from和to位置一样,返回 ""
//如果from或to为负数,则按照length从后向前数位置,如果绝对值大于字符串长度,则from归到0,to归到length
//如果经过修正的index中from大于to,则互换from和to
public void subTest(){
String str = "hello world";
System.out.println(StrUtil.sub(str,0,12));
}
На данный момент, даже если ваша позиция в индексе чрезвычайно возмутительна, метод sub может легко с этим справиться.Результат выполнения программы:
hello world
4. формат
Этот метод используется для форматирования текста. Вместо объединения строк можно использовать шаблоны строк. См. код:
@Test
//格式化文本
public void formatTest(){
String str = "{}山鸟飞{}";
String formatStr = StrUtil.format(str, "千", "绝");
System.out.println(formatStr);
}
результат операции:
千山鸟飞绝
Этот метод использует {} в качестве заполнителя, а затем заменяет заполнитель в соответствии с порядком параметров, поэтому вы должны обратить внимание на положение параметров.Если слово «Абсолютный» помещено впереди, результат будет другим.
@Test
//格式化文本
public void formatTest(){
String str = "{}山鸟飞{}";
String formatStr = StrUtil.format(str, "绝", "千");
System.out.println(formatStr);
}
результат операции:
绝山鸟飞千
URLUtil
Этот служебный класс специально используется для обработки URL-адресов.
1. адрес
С помощью этого метода строка может быть преобразована в объект URL, код выглядит следующим образом:
@Test
//将字符串转换为URL对象
public void urlTest() {
URL url = URLUtil.url("http://localhost:8080/name=zhangsan&age=20");
//获取URL中域名部分,只保留URL中的协议
URI uri = URLUtil.getHost(url);
System.out.println(uri);
}
результат операции:
http://localhost
2. получитьURL
Этот метод используется для получения URL-адреса, который часто используется в случае использования абсолютного пути.Код выглядит следующим образом:
@Test
//获得URL,常用于使用绝对路径时的情况
public void getURLTest() {
URL url = URLUtil.getURL(FileUtil.file("URLUtilTest.java"));
System.out.println(url.toString());
}
результат операции:
file:/C:/Users/Administrator/Desktop/ideaworkspace/HuTool/out/production/HuTool/URLUtilTest.java
Этот метод может получить абсолютный путь к файлу через имя файла, что очень удобно в сценариях, где используются абсолютные пути.
3. Нормализация
Этот метод используется для стандартизации URL-ссылок, код выглядит следующим образом:
@Test
//标准化化URL链接
public void normalizeTest() {
String url = "www.baidu.com\\example\\test/a";
String newUrl = URLUtil.normalize(url);
System.out.println(newUrl);
}
результат операции:
http://www.baidu.com/example/test/a
Этот метод будетСсылки в заголовке http:// заполняются автоматически и форматируются единообразно.
4. получить путь
Этот метод используется для получения строки части пути в URL-ссылке, например:
@Test
//获得path部分
public void getPathTest() {
String url = "http://localhost/search?name=abc&age=20";
String pathStr = URLUtil.getPath(url);
System.out.println(pathStr);
}
результат операции:
/search
ObjectUtil
В нашем повседневном использовании некоторые методы являются общими для объектов, и эти методы не различают, какие объекты.Для этих методов Hutool инкапсулирует их какObjectUtil
.
1. равный
Этот метод используется для сравнения двух объектов на равенство.Есть два условия равенства:
- obj1 == null && obj2 == null
- obj1.equal(obj2)
Если одно из этих двух условий выполнено, это означает, что два объекта равны Код выглядит следующим образом:
@Test
//比较两个对象是否相等。
//相同的条件有两个,满足其一即可:
//obj1 == null && obj2 == null obj1.equals(obj2)
public void equalTest() {
Object obj = null;
Object obj2 = null;
boolean equal = ObjectUtil.equal(obj, obj2);
System.out.println(equal);
}
результат операции:
true
2. длина
Этот метод используется для вычисления длины входящего объекта.Если передается строка, вычисляется длина строки, если передается коллекция, вычисляется размер набора, метод длины автоматически вызывает метод метод расчета длины соответствующего типа.
@Test
//计算对象长度,如果是字符串调用其length函数,集合类调用其size函数,数组调用其length属性,其他可遍历对象遍历计算长度
//支持的类型包括: CharSequence Map Iterator Enumeration Array
public void lengthTest() {
String str = "hello world";
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6);
System.out.println(ObjectUtil.length(str));
System.out.println(ObjectUtil.length(list));
}
результат операции:
11
6
3. содержит
Этот метод используется для определения того, существует ли еще указанный элемент в данном объекте.Код выглядит следующим образом:
@Test
//对象中是否包含元素
//支持的对象类型包括: String Collection Map Iterator Enumeration Array
public void containsTest() {
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6);
boolean flag = ObjectUtil.contains(list, 1);
System.out.println(flag);
}
результат операции:
true
4. Базовый тип
Этот метод используется для определения того, является ли данный объект базовым типом, включая типы с оболочкой и без нее.Код выглядит следующим образом:
@Test
//是否为基本类型,包括包装类型和非包装类型
public void isBasicTypeTest(){
String str = "hello";
int num = 100;
boolean flag = ObjectUtil.isBasicType(str);
boolean flag2 = ObjectUtil.isBasicType(num);
System.out.println(flag);
System.out.println(flag2);
}
результат операции:
false
true
ReflectUtil
Механизм отражения является ядром Java. Реализация платформы Java использует много отражений. HuTool выполняет некоторую инкапсуляцию для отражения Java.
1. получить методы
Этот метод используется для получения всех методов класса, включая методы родительского класса.
@Test
//获得一个类中所有方法列表,包括其父类中的方法
public void getMethodsTest() {
Method[] methods = ReflectUtil.getMethods(Object.class);
for (Method method : methods) {
System.out.println(method.getName());
}
}
результат операции:
finalize
wait
wait
wait
equals
toString
hashCode
getClass
clone
notify
notifyAll
registerNatives
2. метод получения
Этот метод используется для получения указанного метода класса.Код выглядит следующим образом:
@Test
//获取某个类的指定方法
public void getMethodsTest() {
Method method = ReflectUtil.getMethod(Object.class, "getClass");
System.out.println(method);
}
результат операции:
public final native java.lang.Class java.lang.Object.getClass()
**3. новый экземпляр**
Этот метод создает экземпляр объекта через тип Class класса, код выглядит следующим образом:
@Test
//实例化对象
public void newInstanceTest() {
Object obj = ReflectUtil.newInstance(Object.class);
boolean flag = ObjectUtil.isNull(obj);
System.out.println(flag);
}
результат операции:
false
4. Вызов
Этот метод используется для выполнения метода в объекте, код выглядит следующим образом:
@Test
//执行方法
public void invokeTest() {
ArrayList list = ReflectUtil.newInstance(ArrayList.class);
ReflectUtil.invoke(list,"add",1);
System.out.println(list);
}
результат операции:
[1]
Второй параметр — это имя метода, который нужно выполнить, а третий параметр — это параметр метода, который нужно выполнить.
ClipboardUtil
Это класс инструментов буфера обмена, который используется для упрощения работы с буфером обмена, который может использоваться в некоторых сценариях.
1. получитьстр
Этот метод используется для получения содержимого буфера обмена. Например, если вы выберете часть содержимого с помощью мыши для копирования, этот метод может получить скопированное содержимое. Код выглядит следующим образом:
@Test
//从剪切板获取文本内容
public void getStrTest() {
String str = ClipboardUtil.getStr();
System.out.println(str);
}
результат операции:
String str = ClipboardUtil.getStr();
2. сетстр
Этот метод используется для установки содержимого буфера обмена, то есть для установки указанной строки в буфер обмена, что эквивалентно копированию содержимого.Код выглядит следующим образом:
@Test
//设置剪切板文本内容
public void setStrTest() {
String str = ClipboardUtil.getStr();
System.out.println(str);
ClipboardUtil.setStr("hello world");
String str2 = ClipboardUtil.getStr();
System.out.println(str2);
}
результат операции:
String str = ClipboardUtil.getStr();
hello world
Также есть способы получить картинки, установить картинки и т.д., вы можете испытать это на себе.
ClassUtil
Этот класс в основном инкапсулирует некоторые методы отражения, чтобы сделать вызов более удобным.
1. получить имя короткого класса
Этот метод используется для получения краткой формы имени класса, код выглядит следующим образом:
@Test
//获取类名的短格式
public void getShortClassNameTest(){
String shortClassName = ClassUtil.getShortClassName("com.wwj.hutool.test.ObjectUtilTest");
System.out.println(shortClassName);
}
результат операции:
c.w.h.t.ObjectUtilTest
2. получить пакет
Получите имя пакета указанного класса, код выглядит следующим образом:
@Test
//获取指定类的包名
public void getPackageTest(){
String packageName = ClassUtil.getPackage(ObjectUtilTest.class);
System.out.println(packageName);
}
результат операции:
com.wwj.hutool.test
3. сканирование пакета
Этот метод является ядром класса инструментов. Это метод сканирования ресурсов в пакете. Он используется для внедрения зависимостей в Spring. Код выглядит следующим образом:
@Test
//扫描包下资源
public void scanPackageTest(){
Set<Class<?>> classes = ClassUtil.scanPackage("com.wwj.hutool.test");
for (Class<?> aclass : classes) {
System.out.println(aclass.getName());
}
}
результат операции:
com.wwj.hutool.test.URLUtilTest
com.wwj.hutool.test.StrUtilTest
com.wwj.hutool.test.ObjectUtilTest
Этот метод должен передать имя пакета в качестве параметра, а затем он просканирует все классы в указанном пакете.Вы также можете отфильтровать указанные классы, передав объект ClassFilter.
4. получитьJavaClassPaths
Этот метод используется для получения ClassPath, определенного системными переменными Java.
@Test
public void scanPackageTest(){
String[] javaClassPaths = ClassUtil.getJavaClassPaths();
for (String javaClassPath : javaClassPaths) {
System.out.println(javaClassPath);
}
}
результат операции:
F:\Tool\IntelliJ IDEA 2018.3\lib\idea_rt.jar
F:\Tool\IntelliJ IDEA 2018.3\plugins\junit\lib\junit-rt.jar
F:\Tool\IntelliJ IDEA 2018.3\plugins\junit\lib\junit5-rt.jar
E:\Java\jdk1.8.0_181\jre\lib\charsets.jar
E:\Java\jdk1.8.0_181\jre\lib\deploy.jar
......
RuntimeUtil
Этот класс инструментов используется для выполнения команд командной строки, которая представляет собой cmd в Windows и оболочку в Linux.
Поскольку это очень просто, просто вставьте код прямо сюда:
@Test
public void RunTimeUtilTest(){
String str = RuntimeUtil.execForStr("ipconfig");
System.out.println(str);
}
результат операции:
Windows IP 配置
以太网适配器 以太网:
媒体状态 . . . . . . . . . . . . : 媒体已断开连接
连接特定的 DNS 后缀 . . . . . . . :
无线局域网适配器 本地连接* 1:
媒体状态 . . . . . . . . . . . . : 媒体已断开连接
连接特定的 DNS 后缀 . . . . . . . :
无线局域网适配器 本地连接* 2:
媒体状态 . . . . . . . . . . . . : 媒体已断开连接
连接特定的 DNS 后缀 . . . . . . . :
无线局域网适配器 WLAN:
连接特定的 DNS 后缀 . . . . . . . : www.tendawifi.com
本地链接 IPv6 地址. . . . . . . . : fe80::830:2d92:1427:a434%17
IPv4 地址 . . . . . . . . . . . . : 192.168.0.103
子网掩码 . . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . : 192.168.0.1
NumberUtil
Это инструментальный класс для математических операций.В традиционной Java-разработке часто встречаются вычисления между десятичными знаками, а десятичные дроби легко теряют точность.Для точности обычно используется класс BigDecimal, но преобразование между ними действительно затруднено, сложно. С этой целью HuTool предоставляет класс NumberUtil, который очень упрощает математические вычисления.
1. Сложение, вычитание, умножение и деление
@Test
public void calcTest(){
double d = 3.5;
float f = 0.5f;
System.out.println(NumberUtil.add(d,f));//加
System.out.println(NumberUtil.sub(d,f));//减
System.out.println(NumberUtil.mul(d,f));//乘
System.out.println(NumberUtil.div(d,f));//除
}
результат операции:
4.0
3.0
1.75
7.0
2. Сохраняйте десятичные дроби
@Test
public void calcTest(){
double d = 1234.56789;
System.out.println(NumberUtil.round(d,2));
System.out.println(NumberUtil.roundStr(d,3));
}
результат операции:
1234.57
1234.568
Методы round и roundStr могут использоваться для сохранения десятичных знаков, а режим округления используется по умолчанию.Конечно, вы также можете передать соответствующий режим для изменения программы.
3. Цифровое суждение
NumberUtil предоставляет ряд методов для оценки распространенных типов чисел.Поскольку это очень просто, я не буду вставлять код, просто взгляните на имя метода и функцию.
-
NumberUtil.isNumber
это число -
NumberUtil.isInteger
Это целое число -
NumberUtil.isDouble
Это число с плавающей запятой -
NumberUtil.isPrimes
Это простое число
4. Другое
Конечно, есть и более распространенные математические операции, и NumberUtil также инкапсулирован соответствующим образом.
-
NumberUtil.factorial
факториал -
NumberUtil.sqrt
квадратный корень -
NumberUtil.divisor
наибольший общий делитель -
NumberUtil.multiple
ЛКМ -
NumberUtil.getBinaryStr
Получить двоичную строку, соответствующую числу -
NumberUtil.binaryToInt
двоичный код в int -
NumberUtil.binaryToLong
двоичный в длинный -
NumberUtil.compare
Сравните величину двух значений -
NumberUtil.toStr
Автоматически преобразовывать числа в строки и удалять лишний 0 после запятой
IdUtil
Этот служебный класс в основном используется для создания уникальных идентификаторов.
1. Генерация UUID
@Test
public void IdUtilTest(){
String uuid = IdUtil.randomUUID();
String simpleUUID = IdUtil.simpleUUID();
System.out.println(uuid);
System.out.println(simpleUUID);
}
результат операции:
b1e4e753-39b9-4026-8a08-ce9837e15f62
23f1603604694d029bb35c1c03d7aeb1
Метод ramdimUUID генерирует UUID с «-», а метод simpleUUID генерирует UUID без «-».
2. Идентификатор объекта
ObjectId — это уникальная стратегия генерации идентификатора для базы данных MongoDB, которая является вариантом UUID версии 1.
Hutool инкапсулирует этоcn.hutool.core.lang.ObjectId
, способ создания ярлыка:
//生成类似:5b9e306a4df4f8c54a39fb0c
String id = ObjectId.next();
//方法2:从Hutool-4.1.14开始提供
String id2 = IdUtil.objectId();
3. Снежинка
В распределенных системах есть несколько сценариев, в которых требуются глобально уникальные идентификаторы.Иногда мы хотим использовать более простой идентификатор, и мы надеемся, что идентификаторы могут быть сгенерированы в порядке времени. Алгоритм Snowflake Twitter является таким генератором.
Способ применения следующий:
//参数1为终端ID
//参数2为数据中心ID
Snowflake snowflake = IdUtil.createSnowflake(1, 1);
long id = snowflake.nextId();
ZipUtil
В Java упаковка и сжатие файлов и папок — громоздкая штука, и мы часто вводим для таких операций Zip4j. Но во многих случаях zip-пакет в JDK может удовлетворить большинство наших потребностей. ZipUtil — это инкапсуляция инструмента для java.util.zip, так что операции сжатия и распаковки могут выполняться одним способом и автоматически решать проблемы с файлами и каталогами, нет необходимости в оценке пользователя, сжатые файлы также будут автоматически создавать файлы , автоматически создает родительский каталог, что значительно упрощает сложность сжатия и распаковки.
1. Почтовый индекс
@Test
public void zipUtilTest(){
ZipUtil.zip("C:/Users/Administrator/Desktop/test.txt");
}
Обратите внимание на рабочий стол:Сжатие удалось.
Конечно, вы также можете указать место хранения сжатого сжатого пакета и передать путь вторым параметром методу zip.
Сжатие нескольких файлов или каталогов. Вы можете выбрать несколько файлов или каталогов, чтобы сформировать вместе zip-пакет:
@Test
public void zipUtilTest() {
ZipUtil.zip(FileUtil.file("d:/bbb/ccc.zip"), false,
FileUtil.file("d:/test1/file1.txt"),
FileUtil.file("d:/test1/file2.txt"),
FileUtil.file("d:/test2/file1.txt"),
FileUtil.file("d:/test2/file2.txt")
);
}
Операция распаковки аналогична сжатию, и объяснение повторяться не будет.Метод распаковки — распаковка.
2. GZip
Gzip — это широко используемый метод сжатия при передаче через Интернет, и Hutool также предоставляет свои инструменты для упрощения этого процесса.
ZipUtil.gzip
Сжимайте, сжимайте строки, а также сжимайте файлыZipUtil.unGzip
Разархивируйте файл Gzip
3. Злиб
ZipUtil.zlib
Сжимайте, сжимайте строки, а также сжимайте файлыZipUtil.unZlib
Разархивируйте zlib-файл
IdCardUtil
В ежедневной разработке мы в основном проверяем удостоверение личности обычным способом (количество цифр, диапазон номеров и т. д.), но китайское удостоверение личности, особенно 18-значное удостоверение личности, имеет строгие правила для каждого бита, а последний бит - контрольная цифра. В нашем практическом приложении проверка удостоверений личности должна быть такой строгой. тогдаIdcardUtil
возник.
IdcardUtil
Теперь поддерживает 15-значные и 18-значные идентификационные карты материкового Китая, а также 10-значные идентификационные карты Гонконга, Макао и Тайваня.
К основным методам инструмента относятся:
-
isValidCard
Убедитесь, что идентификатор является законным -
convert15To18
15-значное удостоверение личности на 18-значное -
getBirthByIdCard
получить день рождения -
getAgeByIdCard
получить возраст -
getYearByIdCard
получить год рождения -
getMonthByIdCard
получить месяц рождения -
getDayByIdCard
получить день рождения -
getGenderByIdCard
заняться сексом -
getProvinceByIdCard
получить провинцию
использовать
String ID_18 = "321083197812162119";
String ID_15 = "150102880730303";
//是否有效
boolean valid = IdcardUtil.isValidCard(ID_18);
boolean valid15 = IdcardUtil.isValidCard(ID_15);
//转换
String convert15To18 = IdcardUtil.convert15To18(ID_15);
Assert.assertEquals(convert15To18, "150102198807303035");
//年龄
DateTime date = DateUtil.parse("2017-04-10");
int age = IdcardUtil.getAgeByIdCard(ID_18, date);
Assert.assertEquals(age, 38);
int age2 = IdcardUtil.getAgeByIdCard(ID_15, date);
Assert.assertEquals(age2, 28);
//生日
String birth = IdcardUtil.getBirthByIdCard(ID_18);
Assert.assertEquals(birth, "19781216");
String birth2 = IdcardUtil.getBirthByIdCard(ID_15);
Assert.assertEquals(birth2, "19880730");
//省份
String province = IdcardUtil.getProvinceByIdCard(ID_18);
Assert.assertEquals(province, "江苏");
String province2 = IdcardUtil.getProvinceByIdCard(ID_15);
Assert.assertEquals(province2, "内蒙古");
наконец
В этой статье приведены лишь примеры некоторых классов инструментов в HuTool.На самом деле HuTool — это очень совершенный проект, который реализует множество операций Java, так что мы можем легко работать с некоторым сложным контентом.
Более подробную информацию о HuTool вы можете узнать сами.