From 9b4433fddf5b401edb0aace8a404ac733b122702 Mon Sep 17 00:00:00 2001 From: 田源 <tianyuan@vci-tech.com> Date: 星期四, 03 四月 2025 14:35:02 +0800 Subject: [PATCH] 添加非密字段显示 --- Source/BladeX-Tool/blade-core-tool/src/main/java/org/springblade/core/tool/support/StrSpliter.java | 501 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 501 insertions(+), 0 deletions(-) diff --git a/Source/BladeX-Tool/blade-core-tool/src/main/java/org/springblade/core/tool/support/StrSpliter.java b/Source/BladeX-Tool/blade-core-tool/src/main/java/org/springblade/core/tool/support/StrSpliter.java new file mode 100644 index 0000000..377e9b5 --- /dev/null +++ b/Source/BladeX-Tool/blade-core-tool/src/main/java/org/springblade/core/tool/support/StrSpliter.java @@ -0,0 +1,501 @@ +package org.springblade.core.tool.support; + +import org.springblade.core.tool.utils.Func; +import org.springblade.core.tool.utils.StringPool; +import org.springblade.core.tool.utils.StringUtil; + +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * 瀛楃涓插垏鍒嗗櫒 + * + * @author Looly + */ +public class StrSpliter { + + //---------------------------------------------------------------------------------------------- Split by char + + /** + * 鍒囧垎瀛楃涓茶矾寰勶紝浠呮敮鎸乁nix鍒嗙晫绗︼細/ + * + * @param str 琚垏鍒嗙殑瀛楃涓� + * @return 鍒囧垎鍚庣殑闆嗗悎 + * @since 3.0.8 + */ + public static List<String> splitPath(String str) { + return splitPath(str, 0); + } + + /** + * 鍒囧垎瀛楃涓茶矾寰勶紝浠呮敮鎸乁nix鍒嗙晫绗︼細/ + * + * @param str 琚垏鍒嗙殑瀛楃涓� + * @return 鍒囧垎鍚庣殑闆嗗悎 + * @since 3.0.8 + */ + public static String[] splitPathToArray(String str) { + return toArray(splitPath(str)); + } + + /** + * 鍒囧垎瀛楃涓茶矾寰勶紝浠呮敮鎸乁nix鍒嗙晫绗︼細/ + * + * @param str 琚垏鍒嗙殑瀛楃涓� + * @param limit 闄愬埗鍒嗙墖鏁� + * @return 鍒囧垎鍚庣殑闆嗗悎 + * @since 3.0.8 + */ + public static List<String> splitPath(String str, int limit) { + return split(str, StringPool.SLASH, limit, true, true); + } + + /** + * 鍒囧垎瀛楃涓茶矾寰勶紝浠呮敮鎸乁nix鍒嗙晫绗︼細/ + * + * @param str 琚垏鍒嗙殑瀛楃涓� + * @param limit 闄愬埗鍒嗙墖鏁� + * @return 鍒囧垎鍚庣殑闆嗗悎 + * @since 3.0.8 + */ + public static String[] splitPathToArray(String str, int limit) { + return toArray(splitPath(str, limit)); + } + + /** + * 鍒囧垎瀛楃涓� + * + * @param str 琚垏鍒嗙殑瀛楃涓� + * @param separator 鍒嗛殧绗﹀瓧绗� + * @param ignoreEmpty 鏄惁蹇界暐绌轰覆 + * @return 鍒囧垎鍚庣殑闆嗗悎 + * @since 3.2.1 + */ + public static List<String> splitTrim(String str, char separator, boolean ignoreEmpty) { + return split(str, separator, 0, true, ignoreEmpty); + } + + /** + * 鍒囧垎瀛楃涓� + * + * @param str 琚垏鍒嗙殑瀛楃涓� + * @param separator 鍒嗛殧绗﹀瓧绗� + * @param isTrim 鏄惁鍘婚櫎鍒囧垎瀛楃涓插悗姣忎釜鍏冪礌涓よ竟鐨勭┖鏍� + * @param ignoreEmpty 鏄惁蹇界暐绌轰覆 + * @return 鍒囧垎鍚庣殑闆嗗悎 + * @since 3.0.8 + */ + public static List<String> split(String str, char separator, boolean isTrim, boolean ignoreEmpty) { + return split(str, separator, 0, isTrim, ignoreEmpty); + } + + /** + * 鍒囧垎瀛楃涓诧紝澶у皬鍐欐晱鎰燂紝鍘婚櫎姣忎釜鍏冪礌涓よ竟绌虹櫧绗� + * + * @param str 琚垏鍒嗙殑瀛楃涓� + * @param separator 鍒嗛殧绗﹀瓧绗� + * @param limit 闄愬埗鍒嗙墖鏁帮紝-1涓嶉檺鍒� + * @param ignoreEmpty 鏄惁蹇界暐绌轰覆 + * @return 鍒囧垎鍚庣殑闆嗗悎 + * @since 3.0.8 + */ + public static List<String> splitTrim(String str, char separator, int limit, boolean ignoreEmpty) { + return split(str, separator, limit, true, ignoreEmpty, false); + } + + /** + * 鍒囧垎瀛楃涓诧紝澶у皬鍐欐晱鎰� + * + * @param str 琚垏鍒嗙殑瀛楃涓� + * @param separator 鍒嗛殧绗﹀瓧绗� + * @param limit 闄愬埗鍒嗙墖鏁帮紝-1涓嶉檺鍒� + * @param isTrim 鏄惁鍘婚櫎鍒囧垎瀛楃涓插悗姣忎釜鍏冪礌涓よ竟鐨勭┖鏍� + * @param ignoreEmpty 鏄惁蹇界暐绌轰覆 + * @return 鍒囧垎鍚庣殑闆嗗悎 + * @since 3.0.8 + */ + public static List<String> split(String str, char separator, int limit, boolean isTrim, boolean ignoreEmpty) { + return split(str, separator, limit, isTrim, ignoreEmpty, false); + } + + /** + * 鍒囧垎瀛楃涓诧紝蹇界暐澶у皬鍐� + * + * @param str 琚垏鍒嗙殑瀛楃涓� + * @param separator 鍒嗛殧绗﹀瓧绗� + * @param limit 闄愬埗鍒嗙墖鏁帮紝-1涓嶉檺鍒� + * @param isTrim 鏄惁鍘婚櫎鍒囧垎瀛楃涓插悗姣忎釜鍏冪礌涓よ竟鐨勭┖鏍� + * @param ignoreEmpty 鏄惁蹇界暐绌轰覆 + * @return 鍒囧垎鍚庣殑闆嗗悎 + * @since 3.2.1 + */ + public static List<String> splitIgnoreCase(String str, char separator, int limit, boolean isTrim, boolean ignoreEmpty) { + return split(str, separator, limit, isTrim, ignoreEmpty, true); + } + + /** + * 鍒囧垎瀛楃涓� + * + * @param str 琚垏鍒嗙殑瀛楃涓� + * @param separator 鍒嗛殧绗﹀瓧绗� + * @param limit 闄愬埗鍒嗙墖鏁帮紝-1涓嶉檺鍒� + * @param isTrim 鏄惁鍘婚櫎鍒囧垎瀛楃涓插悗姣忎釜鍏冪礌涓よ竟鐨勭┖鏍� + * @param ignoreEmpty 鏄惁蹇界暐绌轰覆 + * @param ignoreCase 鏄惁蹇界暐澶у皬鍐� + * @return 鍒囧垎鍚庣殑闆嗗悎 + * @since 3.2.1 + */ + public static List<String> split(String str, char separator, int limit, boolean isTrim, boolean ignoreEmpty, boolean ignoreCase) { + if (StringUtil.isEmpty(str)) { + return new ArrayList<String>(0); + } + if (limit == 1) { + return addToList(new ArrayList<String>(1), str, isTrim, ignoreEmpty); + } + + final ArrayList<String> list = new ArrayList<>(limit > 0 ? limit : 16); + int len = str.length(); + int start = 0; + for (int i = 0; i < len; i++) { + if (Func.equals(separator, str.charAt(i))) { + addToList(list, str.substring(start, i), isTrim, ignoreEmpty); + start = i + 1; + + //妫�鏌ユ槸鍚﹁秴鍑鸿寖鍥达紙鏈�澶у厑璁竘imit-1涓紝鍓╀笅涓�涓暀缁欐湯灏惧瓧绗︿覆锛� + if (limit > 0 && list.size() > limit - 2) { + break; + } + } + } + return addToList(list, str.substring(start, len), isTrim, ignoreEmpty); + } + + /** + * 鍒囧垎瀛楃涓蹭负瀛楃涓叉暟缁� + * + * @param str 琚垏鍒嗙殑瀛楃涓� + * @param separator 鍒嗛殧绗﹀瓧绗� + * @param limit 闄愬埗鍒嗙墖鏁� + * @param isTrim 鏄惁鍘婚櫎鍒囧垎瀛楃涓插悗姣忎釜鍏冪礌涓よ竟鐨勭┖鏍� + * @param ignoreEmpty 鏄惁蹇界暐绌轰覆 + * @return 鍒囧垎鍚庣殑闆嗗悎 + * @since 3.0.8 + */ + public static String[] splitToArray(String str, char separator, int limit, boolean isTrim, boolean ignoreEmpty) { + return toArray(split(str, separator, limit, isTrim, ignoreEmpty)); + } + + //---------------------------------------------------------------------------------------------- Split by String + + /** + * 鍒囧垎瀛楃涓诧紝涓嶅拷鐣ュぇ灏忓啓 + * + * @param str 琚垏鍒嗙殑瀛楃涓� + * @param separator 鍒嗛殧绗﹀瓧绗︿覆 + * @param isTrim 鏄惁鍘婚櫎鍒囧垎瀛楃涓插悗姣忎釜鍏冪礌涓よ竟鐨勭┖鏍� + * @param ignoreEmpty 鏄惁蹇界暐绌轰覆 + * @return 鍒囧垎鍚庣殑闆嗗悎 + * @since 3.0.8 + */ + public static List<String> split(String str, String separator, boolean isTrim, boolean ignoreEmpty) { + return split(str, separator, -1, isTrim, ignoreEmpty, false); + } + + /** + * 鍒囧垎瀛楃涓诧紝鍘婚櫎姣忎釜鍏冪礌涓よ竟绌烘牸锛屽拷鐣ュぇ灏忓啓 + * + * @param str 琚垏鍒嗙殑瀛楃涓� + * @param separator 鍒嗛殧绗﹀瓧绗︿覆 + * @param ignoreEmpty 鏄惁蹇界暐绌轰覆 + * @return 鍒囧垎鍚庣殑闆嗗悎 + * @since 3.2.1 + */ + public static List<String> splitTrim(String str, String separator, boolean ignoreEmpty) { + return split(str, separator, true, ignoreEmpty); + } + + /** + * 鍒囧垎瀛楃涓诧紝涓嶅拷鐣ュぇ灏忓啓 + * + * @param str 琚垏鍒嗙殑瀛楃涓� + * @param separator 鍒嗛殧绗﹀瓧绗︿覆 + * @param limit 闄愬埗鍒嗙墖鏁� + * @param isTrim 鏄惁鍘婚櫎鍒囧垎瀛楃涓插悗姣忎釜鍏冪礌涓よ竟鐨勭┖鏍� + * @param ignoreEmpty 鏄惁蹇界暐绌轰覆 + * @return 鍒囧垎鍚庣殑闆嗗悎 + * @since 3.0.8 + */ + public static List<String> split(String str, String separator, int limit, boolean isTrim, boolean ignoreEmpty) { + return split(str, separator, limit, isTrim, ignoreEmpty, false); + } + + /** + * 鍒囧垎瀛楃涓诧紝鍘婚櫎姣忎釜鍏冪礌涓よ竟绌烘牸锛屽拷鐣ュぇ灏忓啓 + * + * @param str 琚垏鍒嗙殑瀛楃涓� + * @param separator 鍒嗛殧绗﹀瓧绗︿覆 + * @param limit 闄愬埗鍒嗙墖鏁� + * @param ignoreEmpty 鏄惁蹇界暐绌轰覆 + * @return 鍒囧垎鍚庣殑闆嗗悎 + * @since 3.2.1 + */ + public static List<String> splitTrim(String str, String separator, int limit, boolean ignoreEmpty) { + return split(str, separator, limit, true, ignoreEmpty); + } + + /** + * 鍒囧垎瀛楃涓诧紝蹇界暐澶у皬鍐� + * + * @param str 琚垏鍒嗙殑瀛楃涓� + * @param separator 鍒嗛殧绗﹀瓧绗︿覆 + * @param limit 闄愬埗鍒嗙墖鏁� + * @param isTrim 鏄惁鍘婚櫎鍒囧垎瀛楃涓插悗姣忎釜鍏冪礌涓よ竟鐨勭┖鏍� + * @param ignoreEmpty 鏄惁蹇界暐绌轰覆 + * @return 鍒囧垎鍚庣殑闆嗗悎 + * @since 3.2.1 + */ + public static List<String> splitIgnoreCase(String str, String separator, int limit, boolean isTrim, boolean ignoreEmpty) { + return split(str, separator, limit, isTrim, ignoreEmpty, true); + } + + /** + * 鍒囧垎瀛楃涓诧紝鍘婚櫎姣忎釜鍏冪礌涓よ竟绌烘牸锛屽拷鐣ュぇ灏忓啓 + * + * @param str 琚垏鍒嗙殑瀛楃涓� + * @param separator 鍒嗛殧绗﹀瓧绗︿覆 + * @param limit 闄愬埗鍒嗙墖鏁� + * @param ignoreEmpty 鏄惁蹇界暐绌轰覆 + * @return 鍒囧垎鍚庣殑闆嗗悎 + * @since 3.2.1 + */ + public static List<String> splitTrimIgnoreCase(String str, String separator, int limit, boolean ignoreEmpty) { + return split(str, separator, limit, true, ignoreEmpty, true); + } + + /** + * 鍒囧垎瀛楃涓� + * + * @param str 琚垏鍒嗙殑瀛楃涓� + * @param separator 鍒嗛殧绗﹀瓧绗︿覆 + * @param limit 闄愬埗鍒嗙墖鏁� + * @param isTrim 鏄惁鍘婚櫎鍒囧垎瀛楃涓插悗姣忎釜鍏冪礌涓よ竟鐨勭┖鏍� + * @param ignoreEmpty 鏄惁蹇界暐绌轰覆 + * @param ignoreCase 鏄惁蹇界暐澶у皬鍐� + * @return 鍒囧垎鍚庣殑闆嗗悎 + * @since 3.2.1 + */ + public static List<String> split(String str, String separator, int limit, boolean isTrim, boolean ignoreEmpty, boolean ignoreCase) { + if (StringUtil.isEmpty(str)) { + return new ArrayList<String>(0); + } + if (limit == 1) { + return addToList(new ArrayList<String>(1), str, isTrim, ignoreEmpty); + } + + if (StringUtil.isEmpty(separator)) { + return split(str, limit); + } else if (separator.length() == 1) { + return split(str, separator.charAt(0), limit, isTrim, ignoreEmpty, ignoreCase); + } + + final ArrayList<String> list = new ArrayList<>(); + int len = str.length(); + int separatorLen = separator.length(); + int start = 0; + int i = 0; + while (i < len) { + i = StringUtil.indexOf(str, separator, start, ignoreCase); + if (i > -1) { + addToList(list, str.substring(start, i), isTrim, ignoreEmpty); + start = i + separatorLen; + + //妫�鏌ユ槸鍚﹁秴鍑鸿寖鍥达紙鏈�澶у厑璁竘imit-1涓紝鍓╀笅涓�涓暀缁欐湯灏惧瓧绗︿覆锛� + if (limit > 0 && list.size() > limit - 2) { + break; + } + } else { + break; + } + } + return addToList(list, str.substring(start, len), isTrim, ignoreEmpty); + } + + /** + * 鍒囧垎瀛楃涓蹭负瀛楃涓叉暟缁� + * + * @param str 琚垏鍒嗙殑瀛楃涓� + * @param separator 鍒嗛殧绗﹀瓧绗� + * @param limit 闄愬埗鍒嗙墖鏁� + * @param isTrim 鏄惁鍘婚櫎鍒囧垎瀛楃涓插悗姣忎釜鍏冪礌涓よ竟鐨勭┖鏍� + * @param ignoreEmpty 鏄惁蹇界暐绌轰覆 + * @return 鍒囧垎鍚庣殑闆嗗悎 + * @since 3.0.8 + */ + public static String[] splitToArray(String str, String separator, int limit, boolean isTrim, boolean ignoreEmpty) { + return toArray(split(str, separator, limit, isTrim, ignoreEmpty)); + } + + //---------------------------------------------------------------------------------------------- Split by Whitespace + + /** + * 浣跨敤绌虹櫧绗﹀垏鍒嗗瓧绗︿覆<br> + * 鍒囧垎鍚庣殑瀛楃涓蹭袱杈逛笉鍖呭惈绌虹櫧绗︼紝绌轰覆鎴栫┖鐧界涓插苟涓嶅仛涓哄厓绱犱箣涓� + * + * @param str 琚垏鍒嗙殑瀛楃涓� + * @param limit 闄愬埗鍒嗙墖鏁� + * @return 鍒囧垎鍚庣殑闆嗗悎 + * @since 3.0.8 + */ + public static List<String> split(String str, int limit) { + if (StringUtil.isEmpty(str)) { + return new ArrayList<String>(0); + } + if (limit == 1) { + return addToList(new ArrayList<String>(1), str, true, true); + } + + final ArrayList<String> list = new ArrayList<>(); + int len = str.length(); + int start = 0; + for (int i = 0; i < len; i++) { + if (Func.isEmpty(str.charAt(i))) { + addToList(list, str.substring(start, i), true, true); + start = i + 1; + if (limit > 0 && list.size() > limit - 2) { + break; + } + } + } + return addToList(list, str.substring(start, len), true, true); + } + + /** + * 鍒囧垎瀛楃涓蹭负瀛楃涓叉暟缁� + * + * @param str 琚垏鍒嗙殑瀛楃涓� + * @param limit 闄愬埗鍒嗙墖鏁� + * @return 鍒囧垎鍚庣殑闆嗗悎 + * @since 3.0.8 + */ + public static String[] splitToArray(String str, int limit) { + return toArray(split(str, limit)); + } + + //---------------------------------------------------------------------------------------------- Split by regex + + /** + * 閫氳繃姝e垯鍒囧垎瀛楃涓� + * + * @param str 瀛楃涓� + * @param separatorPattern 鍒嗛殧绗︽鍒檣@link Pattern} + * @param limit 闄愬埗鍒嗙墖鏁� + * @param isTrim 鏄惁鍘婚櫎鍒囧垎瀛楃涓插悗姣忎釜鍏冪礌涓よ竟鐨勭┖鏍� + * @param ignoreEmpty 鏄惁蹇界暐绌轰覆 + * @return 鍒囧垎鍚庣殑闆嗗悎 + * @since 3.0.8 + */ + public static List<String> split(String str, Pattern separatorPattern, int limit, boolean isTrim, boolean ignoreEmpty) { + if (StringUtil.isEmpty(str)) { + return new ArrayList<String>(0); + } + if (limit == 1) { + return addToList(new ArrayList<String>(1), str, isTrim, ignoreEmpty); + } + + if (null == separatorPattern) { + return split(str, limit); + } + + final Matcher matcher = separatorPattern.matcher(str); + final ArrayList<String> list = new ArrayList<>(); + int len = str.length(); + int start = 0; + while (matcher.find()) { + addToList(list, str.substring(start, matcher.start()), isTrim, ignoreEmpty); + start = matcher.end(); + + if (limit > 0 && list.size() > limit - 2) { + break; + } + } + return addToList(list, str.substring(start, len), isTrim, ignoreEmpty); + } + + /** + * 閫氳繃姝e垯鍒囧垎瀛楃涓蹭负瀛楃涓叉暟缁� + * + * @param str 琚垏鍒嗙殑瀛楃涓� + * @param separatorPattern 鍒嗛殧绗︽鍒檣@link Pattern} + * @param limit 闄愬埗鍒嗙墖鏁� + * @param isTrim 鏄惁鍘婚櫎鍒囧垎瀛楃涓插悗姣忎釜鍏冪礌涓よ竟鐨勭┖鏍� + * @param ignoreEmpty 鏄惁蹇界暐绌轰覆 + * @return 鍒囧垎鍚庣殑闆嗗悎 + * @since 3.0.8 + */ + public static String[] splitToArray(String str, Pattern separatorPattern, int limit, boolean isTrim, boolean ignoreEmpty) { + return toArray(split(str, separatorPattern, limit, isTrim, ignoreEmpty)); + } + + //---------------------------------------------------------------------------------------------- Split by length + + /** + * 鏍规嵁缁欏畾闀垮害锛屽皢缁欏畾瀛楃涓叉埅鍙栦负澶氫釜閮ㄥ垎 + * + * @param str 瀛楃涓� + * @param len 姣忎竴涓皬鑺傜殑闀垮害 + * @return 鎴彇鍚庣殑瀛楃涓叉暟缁� + */ + public static String[] splitByLength(String str, int len) { + int partCount = str.length() / len; + int lastPartCount = str.length() % len; + int fixPart = 0; + if (lastPartCount != 0) { + fixPart = 1; + } + + final String[] strs = new String[partCount + fixPart]; + for (int i = 0; i < partCount + fixPart; i++) { + if (i == partCount + fixPart - 1 && lastPartCount != 0) { + strs[i] = str.substring(i * len, i * len + lastPartCount); + } else { + strs[i] = str.substring(i * len, i * len + len); + } + } + return strs; + } + + //---------------------------------------------------------------------------------------------------------- Private method start + + /** + * 灏嗗瓧绗︿覆鍔犲叆List涓� + * + * @param list 鍒楄〃 + * @param part 琚姞鍏ョ殑閮ㄥ垎 + * @param isTrim 鏄惁鍘婚櫎涓ょ绌虹櫧绗� + * @param ignoreEmpty 鏄惁鐣ヨ繃绌哄瓧绗︿覆锛堢┖瀛楃涓蹭笉鍋氫负涓�涓厓绱狅級 + * @return 鍒楄〃 + */ + private static List<String> addToList(List<String> list, String part, boolean isTrim, boolean ignoreEmpty) { + part = part.toString(); + if (isTrim) { + part = part.trim(); + } + if (false == ignoreEmpty || false == part.isEmpty()) { + list.add(part); + } + return list; + } + + /** + * List杞珹rray + * + * @param list List + * @return Array + */ + private static String[] toArray(List<String> list) { + return list.toArray(new String[list.size()]); + } + //---------------------------------------------------------------------------------------------------------- Private method end +} -- Gitblit v1.9.3