去除重复字符串的应用场景包括:
数据处理和清洗:从获取的文本数据中去除重复的字符或字符串,以便进行进一步的分析或处理。
压缩和优化:例如在网络传输或存储数据时,去除重复字符串可以减少数据量,提高传输效率或节省存储空间。
文本比较和相似性分析:通过去除重复后,更准确地比较两个字符串的差异或相似程度。
特定规则的字符串处理:如去除连续重复的字符,只保留一个。
使用 Set 数据结构和扩展运算符
javascript">function removeDuplicateCharacters(str) {
return [...new Set(str)].join('');
}
var str = "123123";
console.log(removeDuplicateCharacters(str));
new Set(str)会创建一个 Set 对象,Set 中的元素是唯一的,自动去除了重复字符。然后通过扩展运算符[…]将 Set 转换回数组,最后使用join(‘’)方法将数组重新组合成字符串。
使用循环和临时变量
javascript">function removeRepeatStr(str) {
var newStr = '';
var flag;
var len = str.length;
for (var i = 0; i < len; i++) {
flag = 1;
var newLen = newStr.length;
for (var j = 0; j < newLen; j++) {
if (str[i] === newStr[j]) {
flag = 0;
break;
}
}
if (flag) {
newStr += str[i];
}
}
return newStr;
}
var str = 'womendeaiwomingbai';
console.log(removeRepeatStr(str));
通过两层循环来判断当前字符是否已经在新字符串newStr中。如果不在,则将其添加到newStr中。外层循环遍历原始字符串的每个字符,内层循环检查该字符是否在已构建的newStr中。
使用 indexOf 方法
javascript">function removeRepeat(str) {
var newStr = '';
var len = str.length;
for (var i = 0; i < len; i++) {
if (newStr.indexOf(str[i]) === -1) {
newStr += str[i];
}
}
return newStr;
}
var str = 'womendouyiyang';
console.log(removeRepeat(str));
遍历字符串中的每个字符,使用indexOf方法检查该字符是否首次出现在新字符串newStr中。如果indexOf返回-1,表示该字符不在newStr中,就将其添加进去。
使用对象属性
javascript">function removeRepeat(str) {
var obj = {};
var newStr = "";
for (var i = 0; i < str.length; i++) {
if (!obj[str[i]]) {
newStr += str[i];
obj[str[i]] = 1;
}
}
return newStr;
}
var str = 'aaaaa';
console.log(removeRepeat(str));
创建一个空对象obj,遍历字符串时,将每个字符作为对象的属性。如果该属性不存在(即该字符首次出现),就将其添加到新字符串newStr中,并在对象中设置相应属性为 1。后续再次遇到相同字符时,由于对象属性已存在,就不会再添加到newStr中。
使用正则表达式
javascript">function removeDuplicate2(str) {
var reg = /(.)(?=.*\1)/g;
var result = str.replace(reg, "");
return result;
}
var str = 'aabdeegdcffdsf';
console.log(removeDuplicate2(str));
正则表达式/(.)(?=.\1)/g的含义如下:
(.):匹配任意一个字符,并将其捕获到分组中。
(?=.\1):是一个正向肯定预查,它表示在当前位置右侧的文本中,必须存在与前面捕获到的分组(即(.)匹配到的字符)相同的字符。其中.*表示匹配任意数量的任意字符(包括 0 个字符),\1表示引用前面捕获到的分组。
/g:表示全局匹配模式,匹配所有符合条件的字符。
然后使用replace方法将匹配到的重复字符替换为空字符串,从而达到去除重复的效果。这种方法会去除所有连续的重复字符,并且保留第一个出现的字符。
先转数组再去重
javascript">var str = "aabccd";
var arr = str.split("");
console.log(arr); // ["a", "a", "b", "c", "c", "d"]
var obj = {};
for (var i = 0; i < arr.length; i++) {
// 若为第一次出现
if (obj[arr[i]] === undefined) {
obj[arr[i]] = 1;
} else {
obj[arr[i]]++;
}
}
console.log(obj); // {a: 2, b: 1, c: 2, d: 1}
var str1 = "";
for (var i in obj) {
// i 代表的是 a, b, c, d
str1 += i;
document.write(i + ":" + obj[i] + "<br>");
}
document.write("<br>" + str1);
首先使用split(“”)将字符串拆分成字符数组。然后创建一个空对象obj,遍历数组。如果字符在obj中不存在(即第一次出现),则将其作为属性添加到obj中,并设置属性值为 1;如果字符已经存在,则将其对应属性值加 1。最后通过遍历obj的属性,将属性名(即不重复的字符)拼接成新的字符串str1。这种方法可以统计每个字符出现的次数,并且去除重复字符。
这些方法各有优缺点,可以根据具体需求和场景选择合适的方法。例如,如果需要简洁的代码且不考虑浏览器兼容性,方法一可能是较好的选择;如果需要处理连续重复字符,方法五的正则表达式可能更合适;而方法二、三、四则相对简单直观,在一些简单场景下也能很好地工作。方法六可以同时获取每个字符出现的次数。
以上就是文章全部内容了,如果喜欢这篇文章的话,还希望三连支持一下,感谢!