From 695cb6d76b838b1e4cb161bae335faa948dca12a Mon Sep 17 00:00:00 2001
From: 疯狂的狮子li <15040126243@163.com>
Date: 星期三, 27 十月 2021 13:16:19 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev' into satoken

---
 ruoyi-common/src/main/java/com/ruoyi/common/utils/StringUtils.java |  812 ++++++++++++++++++++++-----------------------------------
 1 files changed, 316 insertions(+), 496 deletions(-)

diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/StringUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/StringUtils.java
index 4ca2bfc..12fc4db 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/StringUtils.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/StringUtils.java
@@ -1,534 +1,354 @@
 package com.ruoyi.common.utils;
 
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import org.springframework.util.AntPathMatcher;
-import com.ruoyi.common.constant.Constants;
-import com.ruoyi.common.core.text.StrFormatter;
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.lang.Validator;
+import cn.hutool.core.map.MapUtil;
+import cn.hutool.core.util.ArrayUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.ReUtil;
+import cn.hutool.core.util.StrUtil;
+
+import java.util.*;
 
 /**
  * 瀛楃涓插伐鍏风被
- * 
- * @author ruoyi
+ *
+ * @author Lion Li
  */
-public class StringUtils extends org.apache.commons.lang3.StringUtils
-{
-    /** 绌哄瓧绗︿覆 */
-    private static final String NULLSTR = "";
+public class StringUtils extends org.apache.commons.lang3.StringUtils {
 
-    /** 涓嬪垝绾� */
-    private static final char SEPARATOR = '_';
+	/**
+	 * 鑾峰彇鍙傛暟涓嶄负绌哄��
+	 *
+	 * @param value defaultValue 瑕佸垽鏂殑value
+	 * @return value 杩斿洖鍊�
+	 */
+	public static <T> T nvl(T value, T defaultValue) {
+		return ObjectUtil.defaultIfNull(value, defaultValue);
+	}
 
-    /**
-     * 鑾峰彇鍙傛暟涓嶄负绌哄��
-     * 
-     * @param value defaultValue 瑕佸垽鏂殑value
-     * @return value 杩斿洖鍊�
-     */
-    public static <T> T nvl(T value, T defaultValue)
-    {
-        return value != null ? value : defaultValue;
-    }
+	/**
+	 * 鑾峰彇鍙傛暟涓嶄负绌哄��
+	 *
+	 * @param str defaultValue 瑕佸垽鏂殑value
+	 * @return value 杩斿洖鍊�
+	 */
+	public static String blankToDefault(String str, String defaultValue) {
+		return StrUtil.blankToDefault(str, defaultValue);
+	}
 
-    /**
-     * * 鍒ゆ柇涓�涓狢ollection鏄惁涓虹┖锛� 鍖呭惈List锛孲et锛孮ueue
-     * 
-     * @param coll 瑕佸垽鏂殑Collection
-     * @return true锛氫负绌� false锛氶潪绌�
-     */
-    public static boolean isEmpty(Collection<?> coll)
-    {
-        return isNull(coll) || coll.isEmpty();
-    }
+	/**
+	 * * 鍒ゆ柇涓�涓狢ollection鏄惁涓虹┖锛� 鍖呭惈List锛孲et锛孮ueue
+	 *
+	 * @param coll 瑕佸垽鏂殑Collection
+	 * @return true锛氫负绌� false锛氶潪绌�
+	 */
+	public static boolean isEmpty(Collection<?> coll) {
+		return CollUtil.isEmpty(coll);
+	}
 
-    /**
-     * * 鍒ゆ柇涓�涓狢ollection鏄惁闈炵┖锛屽寘鍚獿ist锛孲et锛孮ueue
-     * 
-     * @param coll 瑕佸垽鏂殑Collection
-     * @return true锛氶潪绌� false锛氱┖
-     */
-    public static boolean isNotEmpty(Collection<?> coll)
-    {
-        return !isEmpty(coll);
-    }
+	/**
+	 * * 鍒ゆ柇涓�涓狢ollection鏄惁闈炵┖锛屽寘鍚獿ist锛孲et锛孮ueue
+	 *
+	 * @param coll 瑕佸垽鏂殑Collection
+	 * @return true锛氶潪绌� false锛氱┖
+	 */
+	public static boolean isNotEmpty(Collection<?> coll) {
+		return !isEmpty(coll);
+	}
 
-    /**
-     * * 鍒ゆ柇涓�涓璞℃暟缁勬槸鍚︿负绌�
-     * 
-     * @param objects 瑕佸垽鏂殑瀵硅薄鏁扮粍
-     ** @return true锛氫负绌� false锛氶潪绌�
-     */
-    public static boolean isEmpty(Object[] objects)
-    {
-        return isNull(objects) || (objects.length == 0);
-    }
+	/**
+	 * * 鍒ゆ柇涓�涓璞℃暟缁勬槸鍚︿负绌�
+	 *
+	 * @param objects 瑕佸垽鏂殑瀵硅薄鏁扮粍
+	 *                * @return true锛氫负绌� false锛氶潪绌�
+	 */
+	public static boolean isEmpty(Object[] objects) {
+		return ArrayUtil.isEmpty(objects);
+	}
 
-    /**
-     * * 鍒ゆ柇涓�涓璞℃暟缁勬槸鍚﹂潪绌�
-     * 
-     * @param objects 瑕佸垽鏂殑瀵硅薄鏁扮粍
-     * @return true锛氶潪绌� false锛氱┖
-     */
-    public static boolean isNotEmpty(Object[] objects)
-    {
-        return !isEmpty(objects);
-    }
+	/**
+	 * * 鍒ゆ柇涓�涓璞℃暟缁勬槸鍚﹂潪绌�
+	 *
+	 * @param objects 瑕佸垽鏂殑瀵硅薄鏁扮粍
+	 * @return true锛氶潪绌� false锛氱┖
+	 */
+	public static boolean isNotEmpty(Object[] objects) {
+		return !isEmpty(objects);
+	}
 
-    /**
-     * * 鍒ゆ柇涓�涓狹ap鏄惁涓虹┖
-     * 
-     * @param map 瑕佸垽鏂殑Map
-     * @return true锛氫负绌� false锛氶潪绌�
-     */
-    public static boolean isEmpty(Map<?, ?> map)
-    {
-        return isNull(map) || map.isEmpty();
-    }
+	/**
+	 * * 鍒ゆ柇涓�涓璞℃槸鍚︿负绌�
+	 *
+	 * @param object 瑕佸垽鏂殑瀵硅薄鏁扮粍
+	 *                * @return true锛氫负绌� false锛氶潪绌�
+	 */
+	public static boolean isEmpty(Object object) {
+		return ObjectUtil.isEmpty(object);
+	}
 
-    /**
-     * * 鍒ゆ柇涓�涓狹ap鏄惁涓虹┖
-     * 
-     * @param map 瑕佸垽鏂殑Map
-     * @return true锛氶潪绌� false锛氱┖
-     */
-    public static boolean isNotEmpty(Map<?, ?> map)
-    {
-        return !isEmpty(map);
-    }
+	/**
+	 * * 鍒ゆ柇涓�涓璞℃槸鍚﹂潪绌�
+	 *
+	 * @param object 瑕佸垽鏂殑瀵硅薄鏁扮粍
+	 * @return true锛氶潪绌� false锛氱┖
+	 */
+	public static boolean isNotEmpty(Object object) {
+		return !isEmpty(object);
+	}
 
-    /**
-     * * 鍒ゆ柇涓�涓瓧绗︿覆鏄惁涓虹┖涓�
-     * 
-     * @param str String
-     * @return true锛氫负绌� false锛氶潪绌�
-     */
-    public static boolean isEmpty(String str)
-    {
-        return isNull(str) || NULLSTR.equals(str.trim());
-    }
+	/**
+	 * * 鍒ゆ柇涓�涓狹ap鏄惁涓虹┖
+	 *
+	 * @param map 瑕佸垽鏂殑Map
+	 * @return true锛氫负绌� false锛氶潪绌�
+	 */
+	public static boolean isEmpty(Map<?, ?> map) {
+		return MapUtil.isEmpty(map);
+	}
 
-    /**
-     * * 鍒ゆ柇涓�涓瓧绗︿覆鏄惁涓洪潪绌轰覆
-     * 
-     * @param str String
-     * @return true锛氶潪绌轰覆 false锛氱┖涓�
-     */
-    public static boolean isNotEmpty(String str)
-    {
-        return !isEmpty(str);
-    }
+	/**
+	 * * 鍒ゆ柇涓�涓狹ap鏄惁涓虹┖
+	 *
+	 * @param map 瑕佸垽鏂殑Map
+	 * @return true锛氶潪绌� false锛氱┖
+	 */
+	public static boolean isNotEmpty(Map<?, ?> map) {
+		return !isEmpty(map);
+	}
 
-    /**
-     * * 鍒ゆ柇涓�涓璞℃槸鍚︿负绌�
-     * 
-     * @param object Object
-     * @return true锛氫负绌� false锛氶潪绌�
-     */
-    public static boolean isNull(Object object)
-    {
-        return object == null;
-    }
+	/**
+	 * * 鍒ゆ柇涓�涓瓧绗︿覆鏄惁涓虹┖涓�
+	 *
+	 * @param str String
+	 * @return true锛氫负绌� false锛氶潪绌�
+	 */
+	public static boolean isEmpty(String str) {
+		return StrUtil.isEmpty(str);
+	}
 
-    /**
-     * * 鍒ゆ柇涓�涓璞℃槸鍚﹂潪绌�
-     * 
-     * @param object Object
-     * @return true锛氶潪绌� false锛氱┖
-     */
-    public static boolean isNotNull(Object object)
-    {
-        return !isNull(object);
-    }
+	/**
+	 * * 鍒ゆ柇涓�涓瓧绗︿覆鏄惁涓洪潪绌轰覆
+	 *
+	 * @param str String
+	 * @return true锛氶潪绌轰覆 false锛氱┖涓�
+	 */
+	public static boolean isNotEmpty(String str) {
+		return !isEmpty(str);
+	}
 
-    /**
-     * * 鍒ゆ柇涓�涓璞℃槸鍚︽槸鏁扮粍绫诲瀷锛圝ava鍩烘湰鍨嬪埆鐨勬暟缁勶級
-     * 
-     * @param object 瀵硅薄
-     * @return true锛氭槸鏁扮粍 false锛氫笉鏄暟缁�
-     */
-    public static boolean isArray(Object object)
-    {
-        return isNotNull(object) && object.getClass().isArray();
-    }
+	/**
+	 * * 鍒ゆ柇涓�涓璞℃槸鍚︿负绌�
+	 *
+	 * @param object Object
+	 * @return true锛氫负绌� false锛氶潪绌�
+	 */
+	public static boolean isNull(Object object) {
+		return ObjectUtil.isNull(object);
+	}
 
-    /**
-     * 鍘荤┖鏍�
-     */
-    public static String trim(String str)
-    {
-        return (str == null ? "" : str.trim());
-    }
+	/**
+	 * * 鍒ゆ柇涓�涓璞℃槸鍚﹂潪绌�
+	 *
+	 * @param object Object
+	 * @return true锛氶潪绌� false锛氱┖
+	 */
+	public static boolean isNotNull(Object object) {
+		return !isNull(object);
+	}
 
-    /**
-     * 鎴彇瀛楃涓�
-     * 
-     * @param str 瀛楃涓�
-     * @param start 寮�濮�
-     * @return 缁撴灉
-     */
-    public static String substring(final String str, int start)
-    {
-        if (str == null)
-        {
-            return NULLSTR;
-        }
+	/**
+	 * * 鍒ゆ柇涓�涓璞℃槸鍚︽槸鏁扮粍绫诲瀷锛圝ava鍩烘湰鍨嬪埆鐨勬暟缁勶級
+	 *
+	 * @param object 瀵硅薄
+	 * @return true锛氭槸鏁扮粍 false锛氫笉鏄暟缁�
+	 */
+	public static boolean isArray(Object object) {
+		return ArrayUtil.isArray(object);
+	}
 
-        if (start < 0)
-        {
-            start = str.length() + start;
-        }
+	/**
+	 * 鍘荤┖鏍�
+	 */
+	public static String trim(String str) {
+		return StrUtil.trim(str);
+	}
 
-        if (start < 0)
-        {
-            start = 0;
-        }
-        if (start > str.length())
-        {
-            return NULLSTR;
-        }
+	/**
+	 * 鎴彇瀛楃涓�
+	 *
+	 * @param str   瀛楃涓�
+	 * @param start 寮�濮�
+	 * @return 缁撴灉
+	 */
+	public static String substring(final String str, int start) {
+		return substring(str, start, str.length());
+	}
 
-        return str.substring(start);
-    }
+	/**
+	 * 鎴彇瀛楃涓�
+	 *
+	 * @param str   瀛楃涓�
+	 * @param start 寮�濮�
+	 * @param end   缁撴潫
+	 * @return 缁撴灉
+	 */
+	public static String substring(final String str, int start, int end) {
+		return StrUtil.sub(str, start, end);
+	}
 
-    /**
-     * 鎴彇瀛楃涓�
-     * 
-     * @param str 瀛楃涓�
-     * @param start 寮�濮�
-     * @param end 缁撴潫
-     * @return 缁撴灉
-     */
-    public static String substring(final String str, int start, int end)
-    {
-        if (str == null)
-        {
-            return NULLSTR;
-        }
+	/**
+	 * 鏍煎紡鍖栨枃鏈�, {} 琛ㄧず鍗犱綅绗�<br>
+	 * 姝ゆ柟娉曞彧鏄畝鍗曞皢鍗犱綅绗� {} 鎸夌収椤哄簭鏇挎崲涓哄弬鏁�<br>
+	 * 濡傛灉鎯宠緭鍑� {} 浣跨敤 \\杞箟 { 鍗冲彲锛屽鏋滄兂杈撳嚭 {} 涔嬪墠鐨� \ 浣跨敤鍙岃浆涔夌 \\\\ 鍗冲彲<br>
+	 * 渚嬶細<br>
+	 * 閫氬父浣跨敤锛歠ormat("this is {} for {}", "a", "b") -> this is a for b<br>
+	 * 杞箟{}锛� format("this is \\{} for {}", "a", "b") -> this is \{} for a<br>
+	 * 杞箟\锛� format("this is \\\\{} for {}", "a", "b") -> this is \a for b<br>
+	 *
+	 * @param template 鏂囨湰妯℃澘锛岃鏇挎崲鐨勯儴鍒嗙敤 {} 琛ㄧず
+	 * @param params   鍙傛暟鍊�
+	 * @return 鏍煎紡鍖栧悗鐨勬枃鏈�
+	 */
+	public static String format(String template, Object... params) {
+		return StrUtil.format(template, params);
+	}
 
-        if (end < 0)
-        {
-            end = str.length() + end;
-        }
-        if (start < 0)
-        {
-            start = str.length() + start;
-        }
+	/**
+	 * 鏄惁涓篽ttp(s)://寮�澶�
+	 *
+	 * @param link 閾炬帴
+	 * @return 缁撴灉
+	 */
+	public static boolean ishttp(String link) {
+		return Validator.isUrl(link);
+	}
 
-        if (end > str.length())
-        {
-            end = str.length();
-        }
+	/**
+	 * 瀛楃涓茶浆set
+	 *
+	 * @param str 瀛楃涓�
+	 * @param sep 鍒嗛殧绗�
+	 * @return set闆嗗悎
+	 */
+	public static Set<String> str2Set(String str, String sep) {
+		return new HashSet<>(str2List(str, sep, true, false));
+	}
 
-        if (start > end)
-        {
-            return NULLSTR;
-        }
+	/**
+	 * 瀛楃涓茶浆list
+	 *
+	 * @param str         瀛楃涓�
+	 * @param sep         鍒嗛殧绗�
+	 * @param filterBlank 杩囨护绾┖鐧�
+	 * @param trim        鍘绘帀棣栧熬绌虹櫧
+	 * @return list闆嗗悎
+	 */
+	public static List<String> str2List(String str, String sep, boolean filterBlank, boolean trim) {
+		List<String> list = new ArrayList<>();
+		if (isEmpty(str)) {
+			return list;
+		}
 
-        if (start < 0)
-        {
-            start = 0;
-        }
-        if (end < 0)
-        {
-            end = 0;
-        }
+		// 杩囨护绌虹櫧瀛楃涓�
+		if (filterBlank && isBlank(str)) {
+			return list;
+		}
+		String[] split = str.split(sep);
+		for (String string : split) {
+			if (filterBlank && isBlank(string)) {
+				continue;
+			}
+			if (trim) {
+				string = trim(string);
+			}
+			list.add(string);
+		}
 
-        return str.substring(start, end);
-    }
+		return list;
+	}
 
-    /**
-     * 鏍煎紡鍖栨枃鏈�, {} 琛ㄧず鍗犱綅绗�<br>
-     * 姝ゆ柟娉曞彧鏄畝鍗曞皢鍗犱綅绗� {} 鎸夌収椤哄簭鏇挎崲涓哄弬鏁�<br>
-     * 濡傛灉鎯宠緭鍑� {} 浣跨敤 \\杞箟 { 鍗冲彲锛屽鏋滄兂杈撳嚭 {} 涔嬪墠鐨� \ 浣跨敤鍙岃浆涔夌 \\\\ 鍗冲彲<br>
-     * 渚嬶細<br>
-     * 閫氬父浣跨敤锛歠ormat("this is {} for {}", "a", "b") -> this is a for b<br>
-     * 杞箟{}锛� format("this is \\{} for {}", "a", "b") -> this is \{} for a<br>
-     * 杞箟\锛� format("this is \\\\{} for {}", "a", "b") -> this is \a for b<br>
-     * 
-     * @param template 鏂囨湰妯℃澘锛岃鏇挎崲鐨勯儴鍒嗙敤 {} 琛ㄧず
-     * @param params 鍙傛暟鍊�
-     * @return 鏍煎紡鍖栧悗鐨勬枃鏈�
-     */
-    public static String format(String template, Object... params)
-    {
-        if (isEmpty(params) || isEmpty(template))
-        {
-            return template;
-        }
-        return StrFormatter.format(template, params);
-    }
+	/**
+	 * 鏌ユ壘鎸囧畾瀛楃涓叉槸鍚﹀寘鍚寚瀹氬瓧绗︿覆鍒楄〃涓殑浠绘剰涓�涓瓧绗︿覆鍚屾椂涓插拷鐣ュぇ灏忓啓
+	 *
+	 * @param cs                  鎸囧畾瀛楃涓�
+	 * @param searchCharSequences 闇�瑕佹鏌ョ殑瀛楃涓叉暟缁�
+	 * @return 鏄惁鍖呭惈浠绘剰涓�涓瓧绗︿覆
+	 */
+	public static boolean containsAnyIgnoreCase(CharSequence cs, CharSequence... searchCharSequences) {
+		return StrUtil.containsAnyIgnoreCase(cs, searchCharSequences);
+	}
 
-    /**
-     * 鏄惁涓篽ttp(s)://寮�澶�
-     * 
-     * @param link 閾炬帴
-     * @return 缁撴灉
-     */
-    public static boolean ishttp(String link)
-    {
-        return StringUtils.startsWithAny(link, Constants.HTTP, Constants.HTTPS);
-    }
+	/**
+	 * 椹煎嘲杞笅鍒掔嚎鍛藉悕
+	 */
+	public static String toUnderScoreCase(String str) {
+		return StrUtil.toUnderlineCase(str);
+	}
 
-    /**
-     * 瀛楃涓茶浆set
-     * 
-     * @param str 瀛楃涓�
-     * @param sep 鍒嗛殧绗�
-     * @return set闆嗗悎
-     */
-    public static final Set<String> str2Set(String str, String sep)
-    {
-        return new HashSet<String>(str2List(str, sep, true, false));
-    }
+	/**
+	 * 鏄惁鍖呭惈瀛楃涓�
+	 *
+	 * @param str  楠岃瘉瀛楃涓�
+	 * @param strs 瀛楃涓茬粍
+	 * @return 鍖呭惈杩斿洖true
+	 */
+	public static boolean inStringIgnoreCase(String str, String... strs) {
+		return StrUtil.equalsAnyIgnoreCase(str, strs);
+	}
 
-    /**
-     * 瀛楃涓茶浆list
-     * 
-     * @param str 瀛楃涓�
-     * @param sep 鍒嗛殧绗�
-     * @param filterBlank 杩囨护绾┖鐧�
-     * @param trim 鍘绘帀棣栧熬绌虹櫧
-     * @return list闆嗗悎
-     */
-    public static final List<String> str2List(String str, String sep, boolean filterBlank, boolean trim)
-    {
-        List<String> list = new ArrayList<String>();
-        if (StringUtils.isEmpty(str))
-        {
-            return list;
-        }
+	/**
+	 * 灏嗕笅鍒掔嚎澶у啓鏂瑰紡鍛藉悕鐨勫瓧绗︿覆杞崲涓洪┘宄板紡銆傚鏋滆浆鎹㈠墠鐨勪笅鍒掔嚎澶у啓鏂瑰紡鍛藉悕鐨勫瓧绗︿覆涓虹┖锛屽垯杩斿洖绌哄瓧绗︿覆銆� 渚嬪锛欻ELLO_WORLD->HelloWorld
+	 *
+	 * @param name 杞崲鍓嶇殑涓嬪垝绾垮ぇ鍐欐柟寮忓懡鍚嶇殑瀛楃涓�
+	 * @return 杞崲鍚庣殑椹煎嘲寮忓懡鍚嶇殑瀛楃涓�
+	 */
+	public static String convertToCamelCase(String name) {
+		return StrUtil.upperFirst(StrUtil.toCamelCase(name));
+	}
 
-        // 杩囨护绌虹櫧瀛楃涓�
-        if (filterBlank && StringUtils.isBlank(str))
-        {
-            return list;
-        }
-        String[] split = str.split(sep);
-        for (String string : split)
-        {
-            if (filterBlank && StringUtils.isBlank(string))
-            {
-                continue;
-            }
-            if (trim)
-            {
-                string = string.trim();
-            }
-            list.add(string);
-        }
+	/**
+	 * 椹煎嘲寮忓懡鍚嶆硶 渚嬪锛歶ser_name->userName
+	 */
+	public static String toCamelCase(String s) {
+		return StrUtil.toCamelCase(s);
+	}
 
-        return list;
-    }
+	/**
+	 * 鏌ユ壘鎸囧畾瀛楃涓叉槸鍚﹀尮閰嶆寚瀹氬瓧绗︿覆鍒楄〃涓殑浠绘剰涓�涓瓧绗︿覆
+	 *
+	 * @param str  鎸囧畾瀛楃涓�
+	 * @param strs 闇�瑕佹鏌ョ殑瀛楃涓叉暟缁�
+	 * @return 鏄惁鍖归厤
+	 */
+	public static boolean matches(String str, List<String> strs) {
+		if (isEmpty(str) || isEmpty(strs)) {
+			return false;
+		}
+		for (String pattern : strs) {
+			if (isMatch(pattern, str)) {
+				return true;
+			}
+		}
+		return false;
+	}
 
-    /**
-     * 鏌ユ壘鎸囧畾瀛楃涓叉槸鍚﹀寘鍚寚瀹氬瓧绗︿覆鍒楄〃涓殑浠绘剰涓�涓瓧绗︿覆鍚屾椂涓插拷鐣ュぇ灏忓啓
-     *
-     * @param cs 鎸囧畾瀛楃涓�
-     * @param searchCharSequences 闇�瑕佹鏌ョ殑瀛楃涓叉暟缁�
-     * @return 鏄惁鍖呭惈浠绘剰涓�涓瓧绗︿覆
-     */
-    public static boolean containsAnyIgnoreCase(CharSequence cs, CharSequence... searchCharSequences)
-    {
-        if (isEmpty(cs) || isEmpty(searchCharSequences))
-        {
-            return false;
-        }
-        for (CharSequence testStr : searchCharSequences)
-        {
-            if (containsIgnoreCase(cs, testStr))
-            {
-                return true;
-            }
-        }
-        return false;
-    }
+	/**
+	 * 鍒ゆ柇url鏄惁涓庤鍒欓厤缃�:
+	 * ? 琛ㄧず鍗曚釜瀛楃;
+	 * * 琛ㄧず涓�灞傝矾寰勫唴鐨勪换鎰忓瓧绗︿覆锛屼笉鍙法灞傜骇;
+	 * ** 琛ㄧず浠绘剰灞傝矾寰�;
+	 *
+	 * @param pattern 鍖归厤瑙勫垯
+	 * @param url     闇�瑕佸尮閰嶇殑url
+	 * @return
+	 */
+	public static boolean isMatch(String pattern, String url) {
+		return ReUtil.isMatch(pattern, url);
+	}
 
-    /**
-     * 椹煎嘲杞笅鍒掔嚎鍛藉悕
-     */
-    public static String toUnderScoreCase(String str)
-    {
-        if (str == null)
-        {
-            return null;
-        }
-        StringBuilder sb = new StringBuilder();
-        // 鍓嶇疆瀛楃鏄惁澶у啓
-        boolean preCharIsUpperCase = true;
-        // 褰撳墠瀛楃鏄惁澶у啓
-        boolean curreCharIsUpperCase = true;
-        // 涓嬩竴瀛楃鏄惁澶у啓
-        boolean nexteCharIsUpperCase = true;
-        for (int i = 0; i < str.length(); i++)
-        {
-            char c = str.charAt(i);
-            if (i > 0)
-            {
-                preCharIsUpperCase = Character.isUpperCase(str.charAt(i - 1));
-            }
-            else
-            {
-                preCharIsUpperCase = false;
-            }
-
-            curreCharIsUpperCase = Character.isUpperCase(c);
-
-            if (i < (str.length() - 1))
-            {
-                nexteCharIsUpperCase = Character.isUpperCase(str.charAt(i + 1));
-            }
-
-            if (preCharIsUpperCase && curreCharIsUpperCase && !nexteCharIsUpperCase)
-            {
-                sb.append(SEPARATOR);
-            }
-            else if ((i != 0 && !preCharIsUpperCase) && curreCharIsUpperCase)
-            {
-                sb.append(SEPARATOR);
-            }
-            sb.append(Character.toLowerCase(c));
-        }
-
-        return sb.toString();
-    }
-
-    /**
-     * 鏄惁鍖呭惈瀛楃涓�
-     * 
-     * @param str 楠岃瘉瀛楃涓�
-     * @param strs 瀛楃涓茬粍
-     * @return 鍖呭惈杩斿洖true
-     */
-    public static boolean inStringIgnoreCase(String str, String... strs)
-    {
-        if (str != null && strs != null)
-        {
-            for (String s : strs)
-            {
-                if (str.equalsIgnoreCase(trim(s)))
-                {
-                    return true;
-                }
-            }
-        }
-        return false;
-    }
-
-    /**
-     * 灏嗕笅鍒掔嚎澶у啓鏂瑰紡鍛藉悕鐨勫瓧绗︿覆杞崲涓洪┘宄板紡銆傚鏋滆浆鎹㈠墠鐨勪笅鍒掔嚎澶у啓鏂瑰紡鍛藉悕鐨勫瓧绗︿覆涓虹┖锛屽垯杩斿洖绌哄瓧绗︿覆銆� 渚嬪锛欻ELLO_WORLD->HelloWorld
-     * 
-     * @param name 杞崲鍓嶇殑涓嬪垝绾垮ぇ鍐欐柟寮忓懡鍚嶇殑瀛楃涓�
-     * @return 杞崲鍚庣殑椹煎嘲寮忓懡鍚嶇殑瀛楃涓�
-     */
-    public static String convertToCamelCase(String name)
-    {
-        StringBuilder result = new StringBuilder();
-        // 蹇�熸鏌�
-        if (name == null || name.isEmpty())
-        {
-            // 娌″繀瑕佽浆鎹�
-            return "";
-        }
-        else if (!name.contains("_"))
-        {
-            // 涓嶅惈涓嬪垝绾匡紝浠呭皢棣栧瓧姣嶅ぇ鍐�
-            return name.substring(0, 1).toUpperCase() + name.substring(1);
-        }
-        // 鐢ㄤ笅鍒掔嚎灏嗗師濮嬪瓧绗︿覆鍒嗗壊
-        String[] camels = name.split("_");
-        for (String camel : camels)
-        {
-            // 璺宠繃鍘熷瀛楃涓蹭腑寮�澶淬�佺粨灏剧殑涓嬫崲绾挎垨鍙岄噸涓嬪垝绾�
-            if (camel.isEmpty())
-            {
-                continue;
-            }
-            // 棣栧瓧姣嶅ぇ鍐�
-            result.append(camel.substring(0, 1).toUpperCase());
-            result.append(camel.substring(1).toLowerCase());
-        }
-        return result.toString();
-    }
-
-    /**
-     * 椹煎嘲寮忓懡鍚嶆硶 渚嬪锛歶ser_name->userName
-     */
-    public static String toCamelCase(String s)
-    {
-        if (s == null)
-        {
-            return null;
-        }
-        s = s.toLowerCase();
-        StringBuilder sb = new StringBuilder(s.length());
-        boolean upperCase = false;
-        for (int i = 0; i < s.length(); i++)
-        {
-            char c = s.charAt(i);
-
-            if (c == SEPARATOR)
-            {
-                upperCase = true;
-            }
-            else if (upperCase)
-            {
-                sb.append(Character.toUpperCase(c));
-                upperCase = false;
-            }
-            else
-            {
-                sb.append(c);
-            }
-        }
-        return sb.toString();
-    }
-
-    /**
-     * 鏌ユ壘鎸囧畾瀛楃涓叉槸鍚﹀尮閰嶆寚瀹氬瓧绗︿覆鍒楄〃涓殑浠绘剰涓�涓瓧绗︿覆
-     * 
-     * @param str 鎸囧畾瀛楃涓�
-     * @param strs 闇�瑕佹鏌ョ殑瀛楃涓叉暟缁�
-     * @return 鏄惁鍖归厤
-     */
-    public static boolean matches(String str, List<String> strs)
-    {
-        if (isEmpty(str) || isEmpty(strs))
-        {
-            return false;
-        }
-        for (String pattern : strs)
-        {
-            if (isMatch(pattern, str))
-            {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * 鍒ゆ柇url鏄惁涓庤鍒欓厤缃�: 
-     * ? 琛ㄧず鍗曚釜瀛楃; 
-     * * 琛ㄧず涓�灞傝矾寰勫唴鐨勪换鎰忓瓧绗︿覆锛屼笉鍙法灞傜骇; 
-     * ** 琛ㄧず浠绘剰灞傝矾寰�;
-     * 
-     * @param pattern 鍖归厤瑙勫垯
-     * @param url 闇�瑕佸尮閰嶇殑url
-     * @return
-     */
-    public static boolean isMatch(String pattern, String url)
-    {
-        AntPathMatcher matcher = new AntPathMatcher();
-        return matcher.match(pattern, url);
-    }
-
-    @SuppressWarnings("unchecked")
-    public static <T> T cast(Object obj)
-    {
-        return (T) obj;
-    }
-}
\ No newline at end of file
+	@SuppressWarnings("unchecked")
+	public static <T> T cast(Object obj) {
+		return (T) obj;
+	}
+}

--
Gitblit v1.9.3