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去重¶
方法2:使用Java LinkedHashSet¶
方法3:使用Java ArrayList¶
注意事项¶
- ⚠️ 空值处理: 注意处理空字符串和null值
- ⚠️ 空格处理: 使用trim()去除前后空格
- ⚠️ 顺序保持: 如果需要保持原始顺序,使用LinkedHashSet或对象去重
- ⚠️ 大小写敏感: 字符串比较是大小写敏感的,注意处理
- ⚠️ 性能优化: 大量数据时注意性能优化
- ⚠️ 分隔符: 注意分隔符的选择(常用;、,、|等)
- 字符串数组去重时注意处理空值和空格
- 可以使用对象或Set来快速判断是否重复
- 建议保持原始顺序,使用LinkedHashSet或对象去重
使用场景¶
- 用户ID列表去重
- 部门ID列表去重
- 角色ID列表去重
- 数据列表去重
- 字符串处理
如需查看完整脚本代码,请访问源文档链接。