美文网首页工具类
java开发常用工具类(持续更新)

java开发常用工具类(持续更新)

作者: 水煮鱼又失败了 | 来源:发表于2021-06-08 19:51 被阅读0次

    [TOC]

    1 场景

    本文主要记录java开发中,常用的外部工具类,使用这些工具类能大大提高开发的效率代码的健壮性

    因为时间问题,本文将慢慢持续更新完善。

    本文基于JDK1.8

    2 相关maven依赖

    2.1 commons-lang3

    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.12.0</version>
    </dependency>
    

    2.2 commons-collections4

    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-collections4</artifactId>
        <version>4.4</version>
    </dependency>
    

    2.3 commons-text

    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-text</artifactId>
        <version>1.9</version>
    </dependency>
    

    2.4 commons-codec

    <dependency>
        <groupId>commons-codec</groupId>
        <artifactId>commons-codec</artifactId>
        <version>1.15</version>
    </dependency>
    

    2.5 commons-io

    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.9.0</version>
    </dependency>
    

    2.6 commons-csv

    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-csv</artifactId>
        <version>1.8</version>
    </dependency>
    

    3 字符串相关

    3.1 JDK

    相关类:java.lang.String

    3.1.1 数组、集合指定分隔符分隔
    String[] arr = new String[]{"1", "2", "3"};
    // 转换数组,结果:1,2,3
    String result1 = String.join(",", arr);
    
    List<String> list = Stream.of(arr).collect(Collectors.toList());
    // 转换集合,结果:1,2,3
    String result2 = String.join(",", list);
    

    3.2 commons-lang3包

    相关类:

    org.apache.commons.lang3.StringUtils

    org.apache.commons.lang3.RandomStringUtils

    3.2.1 字符串判空
    /**
     * StringUtils.isEmpty(null)      = true
     * StringUtils.isEmpty("")        = true
     * StringUtils.isEmpty(" ")       = false
     * StringUtils.isEmpty("bob")     = false
     * StringUtils.isEmpty("  bob  ") = false
     */
    boolean result = StringUtils.isEmpty(str);
    boolean result = StringUtils.isNotEmpty(str);
    
    /**
     * StringUtils.isBlank(null)      = true
     * StringUtils.isBlank("")        = true
     * StringUtils.isBlank(" ")       = true
     * StringUtils.isBlank("bob")     = false
     * StringUtils.isBlank("  bob  ") = false
     */
    boolean result = StringUtils.isBlank(str);
    boolean result = StringUtils.isNotEmpty(str);
    
    3.2.2 字符串判断相等
    /**
     * StringUtils.equals(null, null)   = true
     * StringUtils.equals(null, "abc")  = false
     * StringUtils.equals("abc", null)  = false
     * StringUtils.equals("abc", "abc") = true
     * StringUtils.equals("abc", "ABC") = false
     */
    boolean result = StringUtils.equals(null, "123");
    
    3.2.3 是否包含子字符串
    /**
     * StringUtils.contains(null, *)     = false
     * StringUtils.contains(*, null)     = false
     * StringUtils.contains("", "")      = true
     * StringUtils.contains("abc", "")   = true
     * StringUtils.contains("abc", "a")  = true
     * StringUtils.contains("abc", "z")  = false
     */
    boolean result = StringUtils.contains("abcd", "ab");
    
    3.3.4 判断以某字符串开头
    
    /**
     * StringUtils.startsWith(null, null)      = true
     * StringUtils.startsWith(null, "abc")     = false
     * StringUtils.startsWith("abcdef", null)  = false
     * StringUtils.startsWith("abcdef", "abc") = true
     * StringUtils.startsWith("ABCDEF", "abc") = false
     */
    boolean result = StringUtils.startsWith("abcd","ab");
    
    2.3.5 判断以某字符串结尾
    /**
     * StringUtils.endsWith(null, null)      = true
     * StringUtils.endsWith(null, "def")     = false
     * StringUtils.endsWith("abcdef", null)  = false
     * StringUtils.endsWith("abcdef", "def") = true
     * StringUtils.endsWith("ABCDEF", "def") = false
     * StringUtils.endsWith("ABCDEF", "cde") = false
     * StringUtils.endsWith("ABCDEF", "")    = true
     */
    boolean result = StringUtils.endsWith("abcd","cd");
    
    3.3.4 补全字符串
    /**
     * StringUtils.leftPad(null, *, *)      = null
     * StringUtils.leftPad("", 3, "z")      = "zzz"
     * StringUtils.leftPad("bat", 3, "yz")  = "bat"
     * StringUtils.leftPad("bat", 5, "yz")  = "yzbat"
     * StringUtils.leftPad("bat", 8, "yz")  = "yzyzybat"
     * StringUtils.leftPad("bat", 1, "yz")  = "bat"
     * StringUtils.leftPad("bat", -1, "yz") = "bat"
     * StringUtils.leftPad("bat", 5, null)  = "  bat"
     * StringUtils.leftPad("bat", 5, "")    = "  bat"
     */
    // 左边补齐为5位字符串,结果:00123
    String result = StringUtils.leftPad("123", 5, "0");
    // 结果:123
    String result = StringUtils.leftPad("123", 2, "0");
    
    //-----------------------------
    /**
     * StringUtils.rightPad(null, *, *)      = null
     * StringUtils.rightPad("", 3, "z")      = "zzz"
     * StringUtils.rightPad("bat", 3, "yz")  = "bat"
     * StringUtils.rightPad("bat", 5, "yz")  = "batyz"
     * StringUtils.rightPad("bat", 8, "yz")  = "batyzyzy"
     * StringUtils.rightPad("bat", 1, "yz")  = "bat"
     * StringUtils.rightPad("bat", -1, "yz") = "bat"
     * StringUtils.rightPad("bat", 5, null)  = "bat  "
     * StringUtils.rightPad("bat", 5, "")    = "bat  "
     */
    // 右侧补齐为5位字符串,结果:12300
    String result = StringUtils.rightPad("123", 5, "0");
    
    3.3.5 反转字符串
    // 结果:cba
    String result = StringUtils.reverse("abc");
    
    3.3.6 重复字符串
    /**
     * StringUtils.repeat(null, 2) = null
     * StringUtils.repeat("", 0)   = ""
     * StringUtils.repeat("", 2)   = ""
     * StringUtils.repeat("a", 3)  = "aaa"
     * StringUtils.repeat("ab", 2) = "abab"
     * StringUtils.repeat("a", -2) = ""
    */
    // 结果:00000
    String result = StringUtils.repeat("0",5);
    
    3.3.7 随机字符串
    //10位,包含英文大小写,如:MiLdFwsrDF
    System.out.println(RandomStringUtils.randomAlphabetic(10));
    
    //10位,包含英文大小写,和数字,如:QESP1Zjqjn
    System.out.println(RandomStringUtils.randomAlphanumeric(10));
    
    //10位,ASCII码,如:Kv(f.1rC)*
    System.out.println(RandomStringUtils.randomAscii(10));
    
    //10位,指定文字,如:ceabbaecec
    System.out.println(RandomStringUtils.random(10, "abcde"));
    
    //10位,数字,如:0025228642
    System.out.println(RandomStringUtils.randomNumeric(10));
    

    3.3 commons-text包

    相关类:org.apache.commons.text.StringSubstitutor

    3.1.1 替换字符串占位符
    Map<String, String> valueMap = new HashMap<>();
    valueMap.put("name", "张三");
    valueMap.put("age", "18");
    // 默认替换占位符【${xxx}】,可调用构造函数【new StringSubstitutor(valueMap)】
    StringSubstitutor stringSubstitutor = new StringSubstitutor(valueMap, "${", "}");
    // 替换结果:姓名:张三,年龄:18。
    String result = stringSubstitutor.replace("姓名:${name},年龄:${age}。");
    
    //-------------------------
    Map<String, Object> params = new HashMap<>();
    params.put("jre-1.8", "java-version-1.8");
    params.put("java.specification.version", "1.8");
    StringSubstitutor stringSubstitutor = new StringSubstitutor(params);
    // 支持变量的嵌套替换
    stringSubstitutor.setEnableSubstitutionInVariables(true);
    // 结果:java-version-1.8
    String result = stringSubstitutor.replace("${jre-${java.specification.version}}");
    

    4 集合相关

    4.1 commons-collections4包

    相关类:org.apache.commons.collections4.CollectionUtils

    4.1.1 判断集合是否为空
    // 非线程安全
    boolean result = CollectionUtils.isEmpty(list);
    boolean result = CollectionUtils.isNotEmpty(list);
    
    4.1.2 元素加到集合中
    List<String> list = new ArrayList<String>(){{add("1");add("2");}};
    // 如何集合被更改,返回true,否则返回false。list内容变更为:1, 2, a, b
    boolean result = CollectionUtils.addAll(list,"a","b");
    // 集合追加到集合
    boolean result = CollectionUtils.addAll(list1,list2);
    
    4.1.3 反转数组
    String[] arr = new String[]{"1", "2", "3"};
    // arr结果为:3,2,1
    CollectionUtils.reverseArray(arr);
    
    4.1.4 合并集合
    // 返回结果:判断集合是否变更
    boolean result = CollectionUtils.addAll(targetList,sourceList);
    

    5 转码

    5.1 commons-codec包

    相关类:

    org.apache.commons.codec.digest.DigestUtils

    5.1.1 MD5摘要
    // 生成md5摘要(32位十六进制),返回:e10adc3949ba59abbe56e057f20f883e
    String md5Hex = DigestUtils.md5Hex("123456");
    
    // 字节数组,生成md5摘要
    // public static String md5Hex(final byte[] data);
    
    // 输入流,生成md5摘要(可用于生成文件的md5摘要)
    // public static String md5Hex(final InputStream data) throws IOException;
    
    5.1.2 SHA-1摘要
    // 生成SHA-1摘要(十六进制),返回:7c4a8d09ca3762af61e59520943dc26494f8941b
    String sha1 = DigestUtils.sha1Hex("123456");
    
    // 字节数组,生成SHA-1摘要
    // public static String sha1Hex(final byte[] data);
    
    // 输入流,生成SHA-1摘要(可用于生成文件的SHA-1摘要)
    // public static String sha1Hex(final InputStream data) throws IOException;
    

    6 文件相关

    6.1 commons-io包

    相关类:

    org.apache.commons.io.FileUtils

    org.apache.commons.io.FilenameUtils

    6.1 获取文件路径信息
    // 获取文件名(无后缀),返回:电话区域表
    String baseName = FilenameUtils.getBaseName("D:\\config\\电话区域表.xlsx");
    
    // 获取文件名(包括后缀),返回:电话区域表.xlsx
    String name = FilenameUtils.getName("D:\\config\\电话区域表.xlsx");
    
    // 获取后缀,返回:xlsx
    String extension = FilenameUtils.getExtension("D:\\config\\电话区域表.xlsx");
    
    6.2 字符串写入文件
    // 写入数据
    String data = "文本数据";
    // 追加写入(默认false)
    boolean append = true;
    // 将一个字符串写入一个文件(无换行)
    FileUtils.writeStringToFile(new File("D:\\config\\test.txt"), data, Charset.forName("GBK"), append);
    
    6.3 批量写入文件
    // 集合内容
    List<String> list = new ArrayList<String>(){{add("aaa");add("bbb");add("ccc");}};
    // 行分隔符(默认null)
    String lineEnding = null;
    // 追加写入(默认false)
    boolean append = false;
    // 字符集名称(默认为null,采用操作系统默认值)
    String charsetName = "GBK";
    // 集合内的每个元素,执行toString(),按行写入文件
    FileUtils.writeLines(new File("D:\\config\\test.txt"), charsetName, list, lineEnding, append);
    

    相关文章

      网友评论

        本文标题:java开发常用工具类(持续更新)

        本文链接:https://www.haomeiwen.com/subject/kezosltx.html