字符串工具-StrUtil

这个工具的用处类似于Apache Commons Lang中的StringUtil。

1.hasBlank、hasEmpty方法

就是给定一些字符串,如果一旦有空的就返回true,常用于判断好多字段是否有空的(例如web表单数据)。
这两个方法的区别是hasEmpty只判断是否为null或者空字符串(””),hasBlank则会把不可见字符也算做空,isEmpty和isBlank同理。

  1. /**
  2. * 基础用法-判断是否为空
  3. */
  4. @Test
  5. public void isnull() {
  6. String str = "www.qingfeng.plus";
  7. //基础功能
  8. System.out.println(StrUtil.isBlank(str));
  9. System.out.println(StrUtil.isNotBlank(str));
  10. System.out.println(StrUtil.isEmpty(str));
  11. System.out.println(StrUtil.isNotEmpty(str));
  12. //isBlank判断某字符串是否为空或长度为0或由空白符(whitespace)构成
  13. System.out.println("===============isBlank===============");
  14. System.out.println(StrUtil.isBlank(""));
  15. System.out.println(StrUtil.isBlank(null));
  16. System.out.println(StrUtil.isBlank(" "));
  17. System.out.println(StrUtil.isBlank("abc"));
  18. //对于制表符、换行符、换页符和回车符StringUtils.isBlank()均识为空白符
  19. System.out.println(StrUtil.isBlank("\t"));
  20. System.out.println(StrUtil.isBlank("\r"));
  21. System.out.println(StrUtil.isBlank("\n"));
  22. System.out.println(StrUtil.isBlank("\f"));
  23. //\b为单词边界符
  24. System.out.println(StrUtil.isBlank("\b"));
  25. //判断某字符串是否为空,为空的标准是str==null或str.length()==0
  26. System.out.println("===============isEmpty===============");
  27. System.out.println(StrUtil.isEmpty(""));
  28. System.out.println(StrUtil.isEmpty(" "));
  29. System.out.println(StrUtil.isEmpty("abc"));
  30. //对于制表符、换行符、换页符和回车符StringUtils.isEmpty()均识为非空字符串
  31. System.out.println(StrUtil.isEmpty("\t"));
  32. System.out.println(StrUtil.isEmpty("\r"));
  33. System.out.println(StrUtil.isEmpty("\n"));
  34. System.out.println(StrUtil.isEmpty("\f"));
  35. //\b为单词边界符
  36. System.out.println(StrUtil.isEmpty("\b"));
  37. }

2.removePrefix、removeSuffix方法

这两个是去掉字符串的前缀后缀的,例如去个文件名的扩展名啥。
还有忽略大小写的removePrefixIgnoreCase和removeSuffixIgnoreCase都比较实用。

  1. @Test
  2. public void remove() {
  3. String name = "www.qingfeng.plus";
  4. String fileName = StrUtil.removeSuffix(name, ".plus"); //fileName -> qingfeng
  5. String suffix = StrUtil.removePrefix(name,"www.");
  6. System.out.println(fileName);
  7. System.out.println(suffix);
  8. }

3.sub方法

有人说String有了subString你还写它干啥,我想说subString方法越界啥的都会报异常。
index的位置还支持负数哦,-1表示最后一个字符

  1. String str = "abcdefgh";
  2. String strSub1 = StrUtil.sub(str, 2, 3); //strSub1 -> c
  3. String strSub2 = StrUtil.sub(str, 2, -3); //strSub2 -> cde
  4. String strSub3 = StrUtil.sub(str, 3, 2); //strSub2 -> c

4.format方法

参数我定义成了Object类型,如果传别的类型的也可以,会自动调用toString()方法的。

  1. String template = "{}爱{},就像老鼠爱大米";
  2. String str = StrUtil.format(template, "我", "你"); //str -> 我爱你,就像老鼠爱大米

16进制工具-HexUtil

16进制一般针对无法显示的一些二进制进行显示,常用于: 1、图片的字符串表现形式 2、加密解密 3、编码转换
HexUtil主要以encodeHex和decodeHex两个方法为核心,提供一些针对字符串的重载方法。

  1. @Test
  2. public void HexUtil() {
  3. String str = "www.qingfeng.plus";
  4. String hex = HexUtil.encodeHexStr(str, CharsetUtil.CHARSET_UTF_8);
  5. System.out.println(hex);
  6. //hex是:
  7. //7777772e71696e6766656e672e706c7573
  8. String decodedStr = HexUtil.decodeHexStr(hex);
  9. //解码后与str相同
  10. System.out.println(decodedStr);
  11. }

Escape工具-EscapeUtil

此类中的方法对应Javascript中的escape()函数和unescape()函数。

  1. EscapeUtil.escape Escape编码(Unicode),该方法不会对 ASCII 字母和数字进行编码,也不会对下面这些 ASCII 标点符号进行编码: * @ - _ + . / 。其他所有的字符都会被转义序列替换。
  2. EscapeUtil.unescape Escape解码。
  3. EscapeUtil.safeUnescape 安全的unescape文本,当文本不是被escape的时候,返回原文。

    1. @Test
    2. public void EscapeUtil() {
    3. String str = "www.qingfeng.plus?name=张三";
    4. String escapeStr = EscapeUtil.escape(str);
    5. //基础功能
    6. System.out.println(escapeStr);
    7. System.out.println(EscapeUtil.unescape(escapeStr));
    8. System.out.println(EscapeUtil.safeUnescape(str));
    9. /**
    10. * www.qingfeng.plus%3fname%3d%u5f20%u4e09
    11. * www.qingfeng.plus?name=张三
    12. * www.qingfeng.plus?name=张三
    13. */
    14. }

    Hash算法-HashUtil

    HashUtil其实是一个hash算法的集合,此工具类中融合了各种hash算法。 :::info

  4. additiveHash 加法hash

  5. rotatingHash 旋转hash
  6. oneByOneHash 一次一个hash
  7. bernstein Bernstein’s hash
  8. universal Universal Hashing
  9. zobrist Zobrist Hashing
  10. fnvHash 改进的32位FNV算法1
  11. intHash Thomas Wang的算法,整数hash
  12. rsHash RS算法hash
  13. jsHash JS算法
  14. pjwHash PJW算法
  15. elfHash ELF算法
  16. bkdrHash BKDR算法
  17. sdbmHash SDBM算法
  18. djbHash DJB算法
  19. dekHash DEK算法
  20. apHash AP算法
  21. tianlHash TianL Hash算法
  22. javaDefaultHash JAVA自己带的算法
  23. mixHash 混合hash算法,输出64位的值 :::

    URL工具-URLUtil

url = “http://www.qingfeng.plus//aaa/\\bbb?a=1&b=2“; // 结果为:http://www.qingfeng.plus/aaa/bbb?a=1&b=2 normalize = URLUtil.normalize(url);

  1. - URLUtil.encode 封装URLEncoder.encode,将需要转换的内容(ASCII码形式之外的内容),用十六进制表示法转换出来,并在之前加上%开头。
  2. ```basic
  3. String body = "366466 - 副本.jpg";
  4. // 结果为:366466%20-%20%E5%89%AF%E6%9C%AC.jpg
  5. String encode = URLUtil.encode(body);
  • URLUtil.decode 封装URLDecoder.decode,将%开头的16进制表示的内容解码。
  • URLUtil.getPath 获得path部分 URI -> http://www.aaa.bbb/search?scope=ccc&q=ddd PATH -> /search
  • URLUtil.toURI 转URL或URL字符串为URI。

XML工具-XmlUtil

在日常编码中,我们接触最多的除了JSON外,就是XML格式了,一般而言,我们首先想到的是引入Dom4j包,却不知JDK已经封装有XML解析和构建工具:w3c dom。但是由于这个API操作比较繁琐,因此Hutool中提供了XmlUtil简化XML的创建、读和写的过程。

读取XML

读取XML分为两个方法:

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