美文网首页
Spring常用工具类

Spring常用工具类

作者: hemiao3000 | 来源:发表于2018-12-31 11:37 被阅读0次

    本片内容收录在我的在线笔记 java-note-for-free 中。

    笔记源文件在 gitee 中。

    • org.springframework.util.ObjectUtils
    • org.springframework.util.StringUtils
    • org.springframework.util.CollectionUtils
    • org.springframework.util.Assert

    1. org.springframework.util.ObjectUtils

    org.springframework.util.ObjectUtils` 有很多处理 null object 的方法. 如

    • nullSafeHashCode,
    • nullSafeEquals,
    • isArray,
    • containsElement,
    • addObjectToArray, 等有用的方法

    1.1 获取对象基本信息

    // 获取对象的类名。参数为 null 时,返回"null"
    static String nullSafeClassName(Object obj)     
    
    // 获取对象 HashCode(十六进制形式字符串)。参数为 null 时,返回 0 
    static String getIdentityHexString(Object obj)
    
    // 获取对象的类名和 HashCode。 参数为 null 时,返回 "" 
    static String identityToString(Object obj)      
    
    // 相当于 toString()方法,但参数为 null 时,返回:""
    static String getDisplayString(Object obj)      
    
    // 被废弃,建议使用jdk8原生hashCode方法
    static int hashCode(boolean bool)             
    

    1.2 判断工具

    // 判断数组是否为空。
    static boolean isEmpty(Object[] array) 
    
    // 判断参数对象是否是数组
    static boolean isArray(Object obj)    
    
    // 判断数组中是否包含指定元素
    static boolean containsElement(Object[] array, Object element) 
    
    static boolean isEmpty(Object obj)
    /**
     *判断参数对象是否为空,判断标准为:
     * Optional: considered empty if Optional.empty()
     * Array: considered empty if its length is zero
     * CharSequence: considered empty if its length is zero
     * Collection: delegates to Collection.isEmpty()
     * Map: delegates to Map.isEmpty()
     */
    

    1.3 NullSafe “替代” Object 原生方法

    // 相等,或同为 null时,返回 true
    static boolean nullSafeEquals(Object o1, Object o2) 
    
    // 参数为 null 时,返回 0
    static int nullSafeHashCode(Object object)         
    
    //  参数为 null 时,返回"null"
    static String   nullSafeToString(boolean[] array)     
    

    1.4 其他工具

    // 向参数数组的末尾追加新元素,并返回一个新数组。
    static <A,O extends A> 
    A[] addObjectToArray(A[] array, O obj)        
    
    // 原生基础类型数组 --> 包装类数组
    static Object[] toObjectArray(Object source)  
    

    2. org.springframework.util.StringUtils

    2.1 字符串判断

    // 判断字符串是否为null,或""。注意,包含空白符的字符串为非空。
    static boolean isEmpty(Object str)
    
    // 判断字符串是否是以指定内容结束。忽略大小写。
    static boolean endsWithIgnoreCase(String str, String suffix)
    
    // 判断字符串是否已指定内容开头。忽略大小写。
    static boolean startsWithIgnoreCase(String str, String prefix)
    
    // 是否包含空白符
    static boolean containsWhitespace(String str)
    
    // 判断字符串非空且长度不为 0。
    static boolean hasLength(CharSequence str)
    
    // 判断字符串是否包含实际内容(即非仅包含空白符)
    static boolean hasText(CharSequence str)
    
    // 判断字符串指定索引处是否包含一个子串。
    static boolean substringMatch(
        CharSequence str, 
        int index, 
        CharSequence substring
    )
    
    // 计算一个字符串中指定子串的出现次数。
    static int countOccurrencesOf(String str, String sub)
    

    2.2 字符串数组操作

    // 向参数字符串数组的末尾添加新的字符串,并返回新数组。
    static String[] addStringToArray(String[] array, String str)
    
    // 将两个字符串数组合并成一个字符串数组。其中重复的元素会出现两次。
    static String[] concatenateStringArrays(String[] array1, String[] array2)
    
    // 被废弃,建议通过 LinkedHashSet 手动合并两个字符串。
    static String[] mergeStringArrays(String[] array1, String[] array2) 
    
    // Remove duplicate strings from the given array.
    static String[] removeDuplicateStrings(String[] array) 
    
    // 对给定字符串数组进行排序,并返回排序后的新数组。
    static String[] sortStringArray(String[] array) 
    

    2.3 字符串 <--> 数组/集合 互转

    /** 集合/数组 转 字符串。**/
    
    // 以 “,” 作为分隔符。
    static String arrayToCommaDelimitedString(Object[] arr)           
    
    // 第二个参数手动指定分隔符。
    static String arrayToDelimitedString(Object[] arr, String delim)  
    
    // 以“,”作为分隔符。
    static String collectionToCommaDelimitedString(Collection<?> coll) 
    
    // 第二个参数手动指定分隔符。
    static String collectionToDelimitedString(
        Collection<?> coll, 
        String delim
    ) 
    
    // 集合中每一个元素的字符串前后可以加上前缀和后缀。
    static String collectionToDelimitedString (
            Collection<?> coll, 
            String delim, 
            String prefix, 
            String suffix
    )
    
    /** 字符串 转 数组/集合 **/
    
    // 以指定分隔符切分成字符串,切割成两份。
    static String[] split(String toSplit, String delimiter)     
    
    // 以指定分隔符(可以是多个)切分字符串
    static String[] tokenizeToStringArray(String str, String delimiters)      
    
    // 以“,”作为分隔符
    static Set<String>  commaDelimitedListToSet(String str)      
    
    // 以“,”作为分隔符。
    static String[] commaDelimitedListToStringArray(String str)  
    
    // 以指定分隔符进行切割
    static String[] delimitedListToStringArray(String str, String delimiter)  
    
    // 切割字符串的同时,删除指定字符(可以使多个)
    static String[] delimitedListToStringArray (
        String str, 
        String delimiter, 
        String charsToDelete
    ) 
    
    /** 其他转换 **/
    
    // 将字符串集合转变为字符串数组。
    static String[] toStringArray(Collection<String> collection) 
    

    2.4 处理字符串内容

    增加新内容

    // 加上单引号
    static String   quote(String str) 
    
    // 同上。如果参数是非字符串,则返回参数对象。
    static Object   quoteIfString(Object obj) 
    

    删除内容

    // 去除尾部的特定字符。
    static String   trimTrailingCharacter(String str, char trailingCharacter) 
    
    // 去除头部的特定字符。
    static String   trimLeadingCharacter(String str, char leadingCharacter)
    
    // 去除头部的空白符。
    static String   trimLeadingWhitespace(String str)   
    
    // 去除头部的空白符。
    static String   trimTrailingWhitespace(String str)  
    
    // 去除头部和尾部的空白符。
    static String   trimWhitespace(String str)          
    
    // 删除开头、结尾和中间的空白符。
    static String   trimAllWhitespace(String str)       
    
    // 删除指定子串
    static String   delete(String inString, String pattern)           
    
    // 删除指定字符(可以是多个)
    static String   deleteAny(String inString, String charsToDelete)  
    
    // 对数组的每一项执行 trim() 方法
    static String[] trimArrayElements(String[] array)               
    

    修改原内容

    // 查找指定子串,替换成指定新内容。
    static String replace(
        String inString, 
        String oldPattern, 
        String newPattern
    )  
    
    // 每个单词的首字母大写。
    static String   capitalize(String str)    
    
    // 每个单词的首字母小写。
    static String   uncapitalize(String str) 
    
    // 将URL字符串进行解码
    static String   uriDecode(String source, Charset charset) 
    

    截取

    // 以“.”作为分隔符,获取其最后一部分。
    static String   unqualify(String qualifiedName) 
    
    // 以指定字符作为分隔符,获取其最后一部分。
    static String   unqualify(String qualifiedName, char separator) 
    

    2.5 文件路径字符串操作

    // 解析路径字符串中的“..”,返回更简洁的字符串路径。
    static String   cleanPath(String path)    
    
    // 从一个路径字符串中解析出文件名部分。
    static String   getFilename(String path)  
    
    // 从一个路径字符串中解析出文件后缀名部分。
    static String   getFilenameExtension(String path)   
    
    // 比较两个路径字符串是否是同一个路径名。会自动处理路径中的“..”。
    static boolean  pathEquals(String path1, String path2)   
    
    // 剥离文件路径名中后缀部分。
    static String   stripFilenameExtension(String path) 
    
    // 在一个路径(通常是绝对路径,需要以“/”结束)之后,添加相对于它为起点的相对路径文件名。
    static String   applyRelativePath(String path, String relativePath) 
    

    2.6 其他

    /*
     * 将字符串数组中的每一项,按照指定分隔符进行切分,并生成 Properties 对象。
     * 字符串数组的内容类似于:new String[]{
     *     "key1,value1", 
     *     "key2,value2", 
     *      "key3,value3"
     *    }
     */
    static Properties splitArrayElementsIntoProperties(
        String[] array, 
        String delimiter
    )
    
    /* 
     * 通过解析时区字符串生成时区对象。
     * 常见 TimeZone 字符串见最后。
     */
    static Properties splitArrayElementsIntoProperties (
            String[] array, 
            String delimiter, 
            String charsToDelete
    )
    static TimeZone parseTimeZoneString(String timeZoneString)
    
    TimeZone 地点
    "Asia/Shanghai" 中国标准时间 (北京)
    "Asia/Hong_Kong" 香港时间 (香港)
    "Asia/Taipei" 台北时间 (台北)
    "Asia/Seoul" 首尔
    "Asia/Tokyo" 日本时间 (东京)
    "America/New_York" 美国东部时间 (纽约)
    "America/Denver" 美国山区时间 (丹佛)
    "America/Costa_Rica" 美国中部时间 (哥斯达黎加)
    "America/Chicago" 美国中部时间 (芝加哥)
    "America/Mexico_City" 美国中部时间 (墨西哥城)
    "America/Regina" 美国中部时间 (里贾纳)
    "America/Los_Angeles" 美国太平洋时间 (洛杉矶)
    "Pacific/Majuro" 马朱罗
    "Pacific/Midway" 中途岛
    "Pacific/Honolulu" 檀香山
    "America/Anchorage" 安克雷奇
    "America/Tijuana" 美国太平洋时间 (提华纳)
    "America/Phoenix" 美国山区时间 (凤凰城)
    "America/Chihuahua" 奇瓦瓦
    "America/Bogota" 哥伦比亚时间 (波哥大)
    "America/Caracas" 委内瑞拉时间 (加拉加斯)
    "America/Barbados" 大西洋时间 (巴巴多斯)
    "America/Manaus" 亚马逊标准时间 (马瑙斯)
    "America/St_Johns" 纽芬兰时间 (圣约翰)
    "America/Santiago" 圣地亚哥
    "America/Argentina/Buenos_Aires" 布宜诺斯艾利斯
    "America/Godthab" 戈特霍布
    "America/Montevideo" 乌拉圭时间 (蒙得维的亚)
    "America/Sao_Paulo" 圣保罗
    "Atlantic/South_Georgia" 南乔治亚
    "Atlantic/Azores" 亚述尔群岛
    "Atlantic/Cape_Verde" 佛得角
    "Africa/Casablanca" 卡萨布兰卡
    "Europe/London" 格林尼治标准时间 (伦敦)
    "Europe/Amsterdam" 中欧标准时间 (阿姆斯特丹)
    "Europe/Belgrade" 中欧标准时间 (贝尔格莱德)
    "Europe/Brussels" 中欧标准时间 (布鲁塞尔)
    "Europe/Sarajevo" 中欧标准时间 (萨拉热窝)
    "Africa/Brazzaville" 西部非洲标准时间 (布拉扎维)
    "Africa/Windhoek" 温得和克
    "Asia/Amman" 东欧标准时间 (安曼)
    "Europe/Athens" 东欧标准时间 (雅典)
    "Asia/Beirut" 东欧标准时间 (贝鲁特)
    "Africa/Cairo" 东欧标准时间 (开罗)
    "Europe/Helsinki" 东欧标准时间 (赫尔辛基)
    "Asia/Jerusalem" 以色列时间 (耶路撒冷)
    "Africa/Harare" 中部非洲标准时间 (哈拉雷)
    "Europe/Minsk" 明斯克
    "Asia/Baghdad" 巴格达
    "Europe/Moscow" 莫斯科
    "Asia/Kuwait" 科威特
    "Africa/Nairobi" 东部非洲标准时间 (内罗毕)
    "Asia/Tehran" 伊朗标准时间 (德黑兰)
    "Asia/Baku" 巴库
    "Asia/Tbilisi" 第比利斯
    "Asia/Yerevan" 埃里温
    "Asia/Dubai" 迪拜
    "Asia/Kabul" 阿富汗时间 (喀布尔)
    "Asia/Karachi" 卡拉奇
    "Asia/Oral" 乌拉尔
    "Asia/Yekaterinburg" 叶卡捷林堡
    "Asia/Calcutta" 加尔各答
    "Asia/Colombo" 科伦坡
    "Asia/Katmandu" 尼泊尔时间 (加德满都)
    "Asia/Almaty" 阿拉木图
    "Asia/Rangoon" 缅甸时间 (仰光)
    "Asia/Krasnoyarsk" 克拉斯诺亚尔斯克
    "Asia/Bangkok" 曼谷
    "Asia/Irkutsk" 伊尔库茨克时间 (伊尔库茨克)
    "Asia/Kuala_Lumpur" 吉隆坡
    "Australia/Perth" 佩思
    "Asia/Yakutsk" 雅库茨克时间 (雅库茨克)
    "Australia/Darwin" 达尔文
    "Australia/Brisbane" 布里斯班
    "Asia/Vladivostok" 海参崴时间 (符拉迪沃斯托克)
    "Pacific/Guam" 关岛
    "Australia/Adelaide" 阿德莱德
    "Australia/Hobart" 霍巴特
    "Australia/Sydney" 悉尼
    "Asia/Magadan" 马加丹时间 (马加丹)
    "Pacific/Auckland" 奥克兰
    "Pacific/Fiji" 斐济
    "Pacific/Tongatapu" 东加塔布

    3. org.springframework.util.CollectionUtils

    3.1 判断工具

    // 判断集合是否为空。
    static boolean  isEmpty (Collection<?> collection)  
    
    // 判断Map是否为空
    static boolean  isEmpty(Map<?,?> map)              
    
    // 判断集合中是否包含某个对象
    static boolean  containsInstance (
        Collection<?> collection, 
        Object element
    )   
    
    // 通过迭代器判断某个对象是否在集合中。
    static boolean  contains (
        Iterator<?> iterator, 
        Object element
    ) 
    
    // 判断集合中是否包含某些对象中的任意一个。
    static boolean  containsAny (
        Collection<?> source, 
        Collection<?> candidates
    )  
    
    // 判断集合中的每个元素是否唯一。即集合中不存在重复元素。
    static boolean  hasUniqueObject (Collection<?> collection)    
    

    3.2 向集合中添加

    // 将数组中的元素都添加找集合中。
    static <E> void mergeArrayIntoCollection (
        Object array, 
        Collection<E> collection
    )  
    
    // 将 Properties 中的键值对都添加到 Map 中。
    static <K,V> void mergePropertiesIntoMap (
        Properties props, 
        Map<K,V> map
    )          
    

    3.3 在集合中查找

    // 返回 List 中最后一个元素。
    static <T> T lastElement (List<T> list)  
    
    // 返回 Set 中最后一个元素。
    static <T> T lastElement (Set<T> set)    
    
    // 返回 candidates 中第一个存在于 source 中的元素。
    static <E> E findFirstMatch (
        Collection<?> source, 
        Collection<E> candidates
    ) 
    
    // 返回集合中指定类型的元素。
    static <T> T findValueOfType (
        Collection<?> collection, 
        Class<T> type
    )       
    
    // 返回集合中指定类型的元素。如果第一种类型未找到,则查找第二种类型,以此类推。
    static Object findValueOfType (
        Collection<?> collection, 
        Class<?>[] types
    )    
    
    // 返回集合中元素的类型
    static Class<?> findCommonElementType (Collection<?> collection)   
    

    3.4 MultiMap 相关

    // 将一个 Map<K, List<V>> 对象转换成一个 MultiValueMap <K, V> 对象。
    static <K,V> 
    MultiValueMap<K,V> toMultiValueMap (Map<K, List<V>> map) 
    
    // 返回 MultiValueMap 对象的一个不可变视图。
    static <K,V> 
    MultiValueMap<K,V> unmodifiableMultiValueMap (
        MultiValueMap<? extends K,? extends V> map
    )
    

    3.5 其他

    // 将数组转换成链表。
    static List arrayToList(Object source) 
    

    4. org.springframework.util.Assert

    Assert 断言工具类,通常用于数据合法性检查,在JAVA编程中,通常会编写如下代码:

    if (name == null || name.equls("")) {  
        throw new IllegalArgumentException("参数错误!");  
    }
    

    在所有方法中都使用手工检测合法性的方式并不是太好,因为这样影响了代码的可读性,若使用 Assert 工具类上面的代码可以简化为:

    Assert.hasText((name, "参数错误!");
    

    这样可以大大增强代码的可读性。

    Assert 类中的常用断言方法:

    1. notNull(Object object, String message)
      当 object 为非空(Not Null)时继续执行,否则抛出异常。message 参数用于定制异常信息。和 notNull() 方法断言规则相反的方法是 isNull(Object object, String message),它要求参数为空(Null)才予以“放行”。

    2. isTrue(boolean expression, String message)
      当 expression 表达式结果为真(True)时继续执行,否则抛出异常。

    3. notEmpty(Collection collection, String message)
      当参数即可非空(Not Empty)时继续执行,否则抛出异常。它有多种重载形式。

    4. hasLength(String text, String message)
      当参数 text 有长度(即长度不为0)时继续执行,否则抛出异常。

    5. hasText(String text, String message)
      当参数 text 有内容(即长度不为0,且不全是空白符)时继续执行,否则抛出异常。

    6. isInstanceOf(Class type, Object obj, String message)
      当参数 obj 是指定类型的实例时继续执行,否则抛出异常。

    7. isAssignable(Class superType, Class subType, String message)
      当参数 subType 是参数 superType 的子类时继续执行,否则抛出异常。

    相关文章

      网友评论

          本文标题:Spring常用工具类

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