首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

通用字符串與集合轉換工具類:MyStringUtils 設計與實現

     編輯:Java 相關知識

設計目標

封裝項目中高頻的「字符串 ⇄ 集合」轉換邏輯,提供統一、可複用、健壯的工具方法。

核心方法詳解

1. parseParameterList:字符串 → Set(空白分隔)

public static Set parseParameterList(String values) {
    Set result = new TreeSet<>();  // 自動去重+排序
    if (values != null && values.trim().length() > 0) {
        // \\s+ 匹配任意空白字符(空格、制表、換行)
        String[] tokens = values.split("[\\s+]");
        result.addAll(Arrays.asList(tokens));
    }
    return result;
}

應用場景:解析 HTTP 參數 `scope=read write execute`

2. formatParameterList:集合 → 字符串(逗號分隔)

public static String formatParameterList(Collection value) {
    return value == null ? null : StringUtils.collectionToDelimitedString(value, ",");
}

依賴 Spring `StringUtils`,輸出 `a,b,c` 格式

3. extractMap:查詢字符串 → Map

public static Map extractMap(String query) {
    Map map = new HashMap<>();
    // query 格式: name=god&password=111&method=up
    Properties props = StringUtils.splitArrayElementsIntoProperties(
        StringUtils.delimitedListToStringArray(query, "&"), "=");
    if (props != null) {
        props.forEach((k, v) -> map.put(k.toString(), v.toString()));
    }
    return map;
}

4. containsAll:判斷集合包含關係

public static boolean containsAll(Set target, Set members) {
    target = new HashSet<>(target);  // 複製避免修改原集合
    target.retainAll(members);       // 取交集
    return target.size() == members.size();  // members 全在 target 中
}

依賴說明

  • `org.apache.commons.lang3.StringUtils`:核心字符串操作
  • `org.springframework.util.StringUtils`:Spring 內部工具,`delimitedListToStringArray` 等

使用示例

// 1. 解析權限範圍
Set scopes = MyStringUtils.parseParameterList("read  write execute");
System.out.println(scopes);  // [execute, read, write] (TreeSet 排序)

// 2. 組裝回傳字符串
String scopeStr = MyStringUtils.formatParameterList(scopes);  // "execute,read,write"

// 3. 解析回調參數
Map params = MyStringUtils.extractMap("user=admin&action=login&token=xyz");
// {user=admin, action=login, token=xyz}

// 4. 權限校驗
boolean hasAll = MyStringUtils.containsAll(userScopes, requiredScopes);

擴展建議

  1. 增加 `joinWithPrefixSuffix` 支持前綴/後綴
  2. 增加 `splitToSet(String, String regex)` 通用分割方法
  3. 增加 `parseKeyValueList(String, String pairDelim, String kvDelim)` 解析 `k1=v1;k2=v2`
  4. 單元測試覆蓋:空值、特殊字符、大小寫、重複元素
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved