跳转至

String字符串去重复

本文档内容来源于 http://doc.myapps.cn/docs/common-script/common-script-1f1a4rf6gif2p

脚本说明

该脚本用于去除字符串中的重复内容。在MyApps平台中,可以去除字符串数组中的重复项,或者去除字符串中重复的字符。

常见实现方式

方式1:字符串数组去重(保持顺序)

(function(){
    var str = "值1;值2;值1;值3;值2";
    var arr = str.split(";");
    var uniqueArr = [];
    var seen = {};

    for(var i = 0; i < arr.length; i++){
        var item = arr[i].trim();
        if(item.length > 0 && !seen[item]){
            seen[item] = true;
            uniqueArr.push(item);
        }
    }

    return uniqueArr.join(";");
})();

方式2:字符串数组去重(使用Set)

(function(){
    var str = "值1;值2;值1;值3;值2";
    var arr = str.split(";");
    var uniqueSet = new Packages.java.util.LinkedHashSet();

    for(var i = 0; i < arr.length; i++){
        var item = arr[i].trim();
        if(item.length > 0){
            uniqueSet.add(item);
        }
    }

    var result = [];
    var iterator = uniqueSet.iterator();
    while(iterator.hasNext()){
        result.push(iterator.next());
    }

    return result.join(";");
})();

方式3:去除字符串中重复的字符

(function(){
    var str = "aabbccdd";
    var result = [];
    var seen = {};

    for(var i = 0; i < str.length; i++){
        var char = str.charAt(i);
        if(!seen[char]){
            seen[char] = true;
            result.push(char);
        }
    }

    return result.join("");
})();

方式4:去除连续重复的字符

(function(){
    var str = "aaabbbccc";
    var result = [];
    var lastChar = "";

    for(var i = 0; i < str.length; i++){
        var char = str.charAt(i);
        if(char != lastChar){
            result.push(char);
            lastChar = char;
        }
    }

    return result.join("");
})();

扩展示例

示例1:从文档字段获取字符串并去重

(function(){
    var doc = getCurrentDocument();
    var str = doc.getItemValueAsString("字段名");

    if(str == null || str.trim().length == 0){
        return "";
    }

    var arr = str.split(";");
    var uniqueArr = [];
    var seen = {};

    for(var i = 0; i < arr.length; i++){
        var item = arr[i].trim();
        if(item.length > 0 && !seen[item]){
            seen[item] = true;
            uniqueArr.push(item);
        }
    }

    return uniqueArr.join(";");
})();

示例2:去重并排序

(function(){
    var str = "值3;值1;值2;值1;值3";
    var arr = str.split(";");
    var uniqueArr = [];
    var seen = {};

    for(var i = 0; i < arr.length; i++){
        var item = arr[i].trim();
        if(item.length > 0 && !seen[item]){
            seen[item] = true;
            uniqueArr.push(item);
        }
    }

    // 排序
    uniqueArr.sort();

    return uniqueArr.join(";");
})();

示例3:去重并统计重复次数

(function(){
    var str = "值1;值2;值1;值3;值2;值1";
    var arr = str.split(";");
    var countMap = {};

    for(var i = 0; i < arr.length; i++){
        var item = arr[i].trim();
        if(item.length > 0){
            if(countMap[item] == null){
                countMap[item] = 0;
            }
            countMap[item]++;
        }
    }

    var result = [];
    for(var key in countMap){
        result.push(key + "(" + countMap[key] + "次)");
    }

    return result.join("; ");
})();

示例4:去除空值和重复值

(function(){
    var str = "值1;;值2;值1; ;值3;值2";
    var arr = str.split(";");
    var uniqueArr = [];
    var seen = {};

    for(var i = 0; i < arr.length; i++){
        var item = arr[i].trim();
        if(item.length > 0 && !seen[item]){
            seen[item] = true;
            uniqueArr.push(item);
        }
    }

    return uniqueArr.join(";");
})();

示例5:使用Java ArrayList去重

(function(){
    var str = "值1;值2;值1;值3;值2";
    var arr = str.split(";");
    var ArrayList = Packages.java.util.ArrayList;
    var list = new ArrayList();

    for(var i = 0; i < arr.length; i++){
        var item = arr[i].trim();
        if(item.length > 0 && !list.contains(item)){
            list.add(item);
        }
    }

    var result = [];
    for(var j = 0; j < list.size(); j++){
        result.push(list.get(j));
    }

    return result.join(";");
})();

示例6:去除重复的用户ID

(function(){
    var userIds = "用户ID1;用户ID2;用户ID1;用户ID3;用户ID2";
    var arr = userIds.split(";");
    var uniqueIds = [];
    var seen = {};

    for(var i = 0; i < arr.length; i++){
        var userId = arr[i].trim();
        if(userId.length > 0 && !seen[userId]){
            seen[userId] = true;
            uniqueIds.push(userId);
        }
    }

    return uniqueIds.join(";");
})();

示例7:去除重复的部门ID

(function(){
    var departmentIds = "部门ID1;部门ID2;部门ID1;部门ID3";
    var arr = departmentIds.split(";");
    var uniqueDepts = [];
    var seen = {};

    for(var i = 0; i < arr.length; i++){
        var deptId = arr[i].trim();
        if(deptId.length > 0 && !seen[deptId]){
            seen[deptId] = true;
            uniqueDepts.push(deptId);
        }
    }

    return uniqueDepts.join(";");
})();

示例8:去除重复并保持原始顺序

(function(){
    var str = "值3;值1;值2;值1;值3";
    var arr = str.split(";");
    var uniqueArr = [];
    var seen = {};

    // 保持原始顺序
    for(var i = 0; i < arr.length; i++){
        var item = arr[i].trim();
        if(item.length > 0 && !seen[item]){
            seen[item] = true;
            uniqueArr.push(item);
        }
    }

    return uniqueArr.join(";");
})();

示例9:去除重复并格式化输出

(function(){
    var str = "值1;值2;值1;值3;值2";
    var arr = str.split(";");
    var uniqueArr = [];
    var seen = {};

    for(var i = 0; i < arr.length; i++){
        var item = arr[i].trim();
        if(item.length > 0 && !seen[item]){
            seen[item] = true;
            uniqueArr.push(item);
        }
    }

    var output = "原始: " + str + "\n";
    output += "去重后: " + uniqueArr.join(";") + "\n";
    output += "数量: " + uniqueArr.length + " 个";

    return output;
})();

示例10:错误处理和日志记录

(function(){
    var str = "值1;值2;值1;值3;值2";

    try{
        if(str == null || str.trim().length == 0){
            return "";
        }

        var arr = str.split(";");
        var uniqueArr = [];
        var seen = {};

        for(var i = 0; i < arr.length; i++){
            var item = arr[i].trim();
            if(item.length > 0 && !seen[item]){
                seen[item] = true;
                uniqueArr.push(item);
            }
        }

        println("原始字符串: " + str);
        println("去重后: " + uniqueArr.join(";"));
        println("去重数量: " + (arr.length - uniqueArr.length));

        return uniqueArr.join(";");
    }catch(e){
        println("错误: " + e.getMessage());
        return str;
    }
})();

关键函数说明

  • str.split("分隔符"): 将字符串按分隔符分割成数组
  • arr.join("分隔符"): 将数组按分隔符连接成字符串
  • str.trim(): 去除字符串前后空格
  • str.charAt(index): 获取指定位置的字符
  • Packages.java.util.LinkedHashSet: Java有序集合(保持插入顺序)
  • Packages.java.util.ArrayList: Java列表
  • list.contains(item): 判断列表是否包含元素

去重方法说明

方法1:使用对象/Map去重

var seen = {};
if(!seen[item]){
    seen[item] = true;
    uniqueArr.push(item);
}

方法2:使用Java LinkedHashSet

var uniqueSet = new Packages.java.util.LinkedHashSet();
uniqueSet.add(item);

方法3:使用Java ArrayList

var list = new Packages.java.util.ArrayList();
if(!list.contains(item)){
    list.add(item);
}

注意事项

  • ⚠️ 空值处理: 注意处理空字符串和null值
  • ⚠️ 空格处理: 使用trim()去除前后空格
  • ⚠️ 顺序保持: 如果需要保持原始顺序,使用LinkedHashSet或对象去重
  • ⚠️ 大小写敏感: 字符串比较是大小写敏感的,注意处理
  • ⚠️ 性能优化: 大量数据时注意性能优化
  • ⚠️ 分隔符: 注意分隔符的选择(常用;、,、|等)
  • 字符串数组去重时注意处理空值和空格
  • 可以使用对象或Set来快速判断是否重复
  • 建议保持原始顺序,使用LinkedHashSet或对象去重

使用场景

  • 用户ID列表去重
  • 部门ID列表去重
  • 角色ID列表去重
  • 数据列表去重
  • 字符串处理

如需查看完整脚本代码,请访问源文档链接。