From aa638475e955207a5d5f76f9ec99415b5a18f5db Mon Sep 17 00:00:00 2001 From: 疯狂的狮子li <15040126243@163.com> Date: 星期四, 25 八月 2022 12:30:32 +0800 Subject: [PATCH] update 同步 ruoyi 新功能 --- ruoyi-common/src/main/java/com/ruoyi/common/utils/StringUtils.java | 553 ++++++++++++++---------------------------------------- 1 files changed, 146 insertions(+), 407 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..16f8861 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,243 +1,83 @@ package com.ruoyi.common.utils; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.lang.Validator; +import cn.hutool.core.util.StrUtil; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; +import org.springframework.util.AntPathMatcher; + 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; /** * 瀛楃涓插伐鍏风被 - * - * @author ruoyi + * + * @author Lion Li */ -public class StringUtils extends org.apache.commons.lang3.StringUtils -{ - /** 绌哄瓧绗︿覆 */ - private static final String NULLSTR = ""; - - /** 涓嬪垝绾� */ - private static final char SEPARATOR = '_'; +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public class StringUtils extends org.apache.commons.lang3.StringUtils { /** * 鑾峰彇鍙傛暟涓嶄负绌哄�� - * - * @param value defaultValue 瑕佸垽鏂殑value + * + * @param str defaultValue 瑕佸垽鏂殑value * @return value 杩斿洖鍊� */ - public static <T> T nvl(T value, T defaultValue) - { - return value != null ? value : defaultValue; - } - - /** - * * 鍒ゆ柇涓�涓狢ollection鏄惁涓虹┖锛� 鍖呭惈List锛孲et锛孮ueue - * - * @param coll 瑕佸垽鏂殑Collection - * @return true锛氫负绌� false锛氶潪绌� - */ - public static boolean isEmpty(Collection<?> coll) - { - return isNull(coll) || coll.isEmpty(); - } - - /** - * * 鍒ゆ柇涓�涓狢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 isNotEmpty(Object[] objects) - { - return !isEmpty(objects); - } - - /** - * * 鍒ゆ柇涓�涓狹ap鏄惁涓虹┖ - * - * @param map 瑕佸垽鏂殑Map - * @return true锛氫负绌� false锛氶潪绌� - */ - public static boolean isEmpty(Map<?, ?> map) - { - return isNull(map) || map.isEmpty(); - } - - /** - * * 鍒ゆ柇涓�涓狹ap鏄惁涓虹┖ - * - * @param map 瑕佸垽鏂殑Map - * @return true锛氶潪绌� false锛氱┖ - */ - public static boolean isNotEmpty(Map<?, ?> map) - { - return !isEmpty(map); + public static String blankToDefault(String str, String defaultValue) { + return StrUtil.blankToDefault(str, defaultValue); } /** * * 鍒ゆ柇涓�涓瓧绗︿覆鏄惁涓虹┖涓� - * + * * @param str String * @return true锛氫负绌� false锛氶潪绌� */ - public static boolean isEmpty(String str) - { - return isNull(str) || NULLSTR.equals(str.trim()); + public static boolean isEmpty(String str) { + return StrUtil.isEmpty(str); } /** * * 鍒ゆ柇涓�涓瓧绗︿覆鏄惁涓洪潪绌轰覆 - * + * * @param str String * @return true锛氶潪绌轰覆 false锛氱┖涓� */ - public static boolean isNotEmpty(String str) - { + public static boolean isNotEmpty(String str) { return !isEmpty(str); - } - - /** - * * 鍒ゆ柇涓�涓璞℃槸鍚︿负绌� - * - * @param object Object - * @return true锛氫负绌� false锛氶潪绌� - */ - public static boolean isNull(Object object) - { - return object == null; - } - - /** - * * 鍒ゆ柇涓�涓璞℃槸鍚﹂潪绌� - * - * @param object Object - * @return true锛氶潪绌� false锛氱┖ - */ - public static boolean isNotNull(Object object) - { - return !isNull(object); - } - - /** - * * 鍒ゆ柇涓�涓璞℃槸鍚︽槸鏁扮粍绫诲瀷锛圝ava鍩烘湰鍨嬪埆鐨勬暟缁勶級 - * - * @param object 瀵硅薄 - * @return true锛氭槸鏁扮粍 false锛氫笉鏄暟缁� - */ - public static boolean isArray(Object object) - { - return isNotNull(object) && object.getClass().isArray(); } /** * 鍘荤┖鏍� */ - public static String trim(String str) - { - return (str == null ? "" : str.trim()); + public static String trim(String str) { + return StrUtil.trim(str); } /** * 鎴彇瀛楃涓� - * - * @param str 瀛楃涓� + * + * @param str 瀛楃涓� * @param start 寮�濮� * @return 缁撴灉 */ - public static String substring(final String str, int start) - { - if (str == null) - { - return NULLSTR; - } - - if (start < 0) - { - start = str.length() + start; - } - - if (start < 0) - { - start = 0; - } - if (start > str.length()) - { - return NULLSTR; - } - - return str.substring(start); + public static String substring(final String str, int start) { + return substring(str, start, str.length()); } /** * 鎴彇瀛楃涓� - * - * @param str 瀛楃涓� + * + * @param str 瀛楃涓� * @param start 寮�濮� - * @param end 缁撴潫 + * @param end 缁撴潫 * @return 缁撴灉 */ - public static String substring(final String str, int start, int end) - { - if (str == null) - { - return NULLSTR; - } - - if (end < 0) - { - end = str.length() + end; - } - if (start < 0) - { - start = str.length() + start; - } - - if (end > str.length()) - { - end = str.length(); - } - - if (start > end) - { - return NULLSTR; - } - - if (start < 0) - { - start = 0; - } - if (end < 0) - { - end = 0; - } - - return str.substring(start, end); + public static String substring(final String str, int start, int end) { + return StrUtil.sub(str, start, end); } /** @@ -246,77 +86,64 @@ * 濡傛灉鎯宠緭鍑� {} 浣跨敤 \\杞箟 { 鍗冲彲锛屽鏋滄兂杈撳嚭 {} 涔嬪墠鐨� \ 浣跨敤鍙岃浆涔夌 \\\\ 鍗冲彲<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 {} for a<br> * 杞箟\锛� format("this is \\\\{} for {}", "a", "b") -> this is \a for b<br> - * + * * @param template 鏂囨湰妯℃澘锛岃鏇挎崲鐨勯儴鍒嗙敤 {} 琛ㄧず - * @param params 鍙傛暟鍊� + * @param params 鍙傛暟鍊� * @return 鏍煎紡鍖栧悗鐨勬枃鏈� */ - public static String format(String template, Object... params) - { - if (isEmpty(params) || isEmpty(template)) - { - return template; - } - return StrFormatter.format(template, params); + public static String format(String template, Object... params) { + return StrUtil.format(template, params); } /** * 鏄惁涓篽ttp(s)://寮�澶� - * + * * @param link 閾炬帴 * @return 缁撴灉 */ - public static boolean ishttp(String link) - { - return StringUtils.startsWithAny(link, Constants.HTTP, Constants.HTTPS); + public static boolean ishttp(String link) { + return Validator.isUrl(link); } /** * 瀛楃涓茶浆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)); + public static Set<String> str2Set(String str, String sep) { + return new HashSet<>(str2List(str, sep, true, false)); } /** * 瀛楃涓茶浆list - * - * @param str 瀛楃涓� - * @param sep 鍒嗛殧绗� + * + * @param str 瀛楃涓� + * @param sep 鍒嗛殧绗� * @param filterBlank 杩囨护绾┖鐧� - * @param trim 鍘绘帀棣栧熬绌虹櫧 + * @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)) - { + public static List<String> str2List(String str, String sep, boolean filterBlank, boolean trim) { + List<String> list = new ArrayList<>(); + if (isEmpty(str)) { return list; } // 杩囨护绌虹櫧瀛楃涓� - if (filterBlank && StringUtils.isBlank(str)) - { + if (filterBlank && isBlank(str)) { return list; } String[] split = str.split(sep); - for (String string : split) - { - if (filterBlank && StringUtils.isBlank(string)) - { + for (String string : split) { + if (filterBlank && isBlank(string)) { continue; } - if (trim) - { - string = string.trim(); + if (trim) { + string = trim(string); } list.add(string); } @@ -327,20 +154,62 @@ /** * 鏌ユ壘鎸囧畾瀛楃涓叉槸鍚﹀寘鍚寚瀹氬瓧绗︿覆鍒楄〃涓殑浠绘剰涓�涓瓧绗︿覆鍚屾椂涓插拷鐣ュぇ灏忓啓 * - * @param cs 鎸囧畾瀛楃涓� + * @param cs 鎸囧畾瀛楃涓� * @param searchCharSequences 闇�瑕佹鏌ョ殑瀛楃涓叉暟缁� * @return 鏄惁鍖呭惈浠绘剰涓�涓瓧绗︿覆 */ - public static boolean containsAnyIgnoreCase(CharSequence cs, CharSequence... searchCharSequences) - { - if (isEmpty(cs) || isEmpty(searchCharSequences)) - { + public static boolean containsAnyIgnoreCase(CharSequence cs, CharSequence... searchCharSequences) { + return StrUtil.containsAnyIgnoreCase(cs, searchCharSequences); + } + + /** + * 椹煎嘲杞笅鍒掔嚎鍛藉悕 + */ + public static String toUnderScoreCase(String str) { + return StrUtil.toUnderlineCase(str); + } + + /** + * 鏄惁鍖呭惈瀛楃涓� + * + * @param str 楠岃瘉瀛楃涓� + * @param strs 瀛楃涓茬粍 + * @return 鍖呭惈杩斿洖true + */ + public static boolean inStringIgnoreCase(String str, String... strs) { + return StrUtil.equalsAnyIgnoreCase(str, strs); + } + + /** + * 灏嗕笅鍒掔嚎澶у啓鏂瑰紡鍛藉悕鐨勫瓧绗︿覆杞崲涓洪┘宄板紡銆傚鏋滆浆鎹㈠墠鐨勪笅鍒掔嚎澶у啓鏂瑰紡鍛藉悕鐨勫瓧绗︿覆涓虹┖锛屽垯杩斿洖绌哄瓧绗︿覆銆� 渚嬪锛欻ELLO_WORLD->HelloWorld + * + * @param name 杞崲鍓嶇殑涓嬪垝绾垮ぇ鍐欐柟寮忓懡鍚嶇殑瀛楃涓� + * @return 杞崲鍚庣殑椹煎嘲寮忓懡鍚嶇殑瀛楃涓� + */ + public static String convertToCamelCase(String name) { + return StrUtil.upperFirst(StrUtil.toCamelCase(name)); + } + + /** + * 椹煎嘲寮忓懡鍚嶆硶 渚嬪锛歶ser_name->userName + */ + public static String toCamelCase(String s) { + return StrUtil.toCamelCase(s); + } + + /** + * 鏌ユ壘鎸囧畾瀛楃涓叉槸鍚﹀尮閰嶆寚瀹氬瓧绗︿覆鍒楄〃涓殑浠绘剰涓�涓瓧绗︿覆 + * + * @param str 鎸囧畾瀛楃涓� + * @param strs 闇�瑕佹鏌ョ殑瀛楃涓叉暟缁� + * @return 鏄惁鍖归厤 + */ + public static boolean matches(String str, List<String> strs) { + if (isEmpty(str) || CollUtil.isEmpty(strs)) { return false; } - for (CharSequence testStr : searchCharSequences) - { - if (containsIgnoreCase(cs, testStr)) - { + for (String pattern : strs) { + if (isMatch(pattern, str)) { return true; } } @@ -348,187 +217,57 @@ } /** - * 椹煎嘲杞笅鍒掔嚎鍛藉悕 + * 鍒ゆ柇url鏄惁涓庤鍒欓厤缃�: + * ? 琛ㄧず鍗曚釜瀛楃; + * * 琛ㄧず涓�灞傝矾寰勫唴鐨勪换鎰忓瓧绗︿覆锛屼笉鍙法灞傜骇; + * ** 琛ㄧず浠绘剰灞傝矾寰�; + * + * @param pattern 鍖归厤瑙勫垯 + * @param url 闇�瑕佸尮閰嶇殑url + * @return */ - 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(); + public static boolean isMatch(String pattern, String url) { + AntPathMatcher matcher = new AntPathMatcher(); + return matcher.match(pattern, url); } /** - * 鏄惁鍖呭惈瀛楃涓� - * - * @param str 楠岃瘉瀛楃涓� - * @param strs 瀛楃涓茬粍 - * @return 鍖呭惈杩斿洖true + * 鏁板瓧宸﹁竟琛ラ綈0锛屼娇涔嬭揪鍒版寚瀹氶暱搴︺�傛敞鎰忥紝濡傛灉鏁板瓧杞崲涓哄瓧绗︿覆鍚庯紝闀垮害澶т簬size锛屽垯鍙繚鐣� 鏈�鍚巗ize涓瓧绗︺�� + * + * @param num 鏁板瓧瀵硅薄 + * @param size 瀛楃涓叉寚瀹氶暱搴� + * @return 杩斿洖鏁板瓧鐨勫瓧绗︿覆鏍煎紡锛岃瀛楃涓蹭负鎸囧畾闀垮害銆� */ - public static boolean inStringIgnoreCase(String str, String... strs) - { - if (str != null && strs != null) - { - for (String s : strs) - { - if (str.equalsIgnoreCase(trim(s))) - { - return true; + public static final String padl(final Number num, final int size) { + return padl(num.toString(), size, '0'); + } + + /** + * 瀛楃涓插乏琛ラ綈銆傚鏋滃師濮嬪瓧绗︿覆s闀垮害澶т簬size锛屽垯鍙繚鐣欐渶鍚巗ize涓瓧绗︺�� + * + * @param s 鍘熷瀛楃涓� + * @param size 瀛楃涓叉寚瀹氶暱搴� + * @param c 鐢ㄤ簬琛ラ綈鐨勫瓧绗� + * @return 杩斿洖鎸囧畾闀垮害鐨勫瓧绗︿覆锛岀敱鍘熷瓧绗︿覆宸﹁ˉ榻愭垨鎴彇寰楀埌銆� + */ + public static final String padl(final String s, final int size, final char c) { + final StringBuilder sb = new StringBuilder(size); + if (s != null) { + final int len = s.length(); + if (s.length() <= size) { + for (int i = size - len; i > 0; i--) { + sb.append(c); } + sb.append(s); + } else { + return s.substring(len - size, len); } - } - 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 - { + } else { + for (int i = size; i > 0; i--) { 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 +} -- Gitblit v1.9.3