js实现含有汉字、字母、数字的字符串压缩与解压算法例如 发-bold-fontSize16-italic
字符串压缩算法:
- 遍历字符串,将连续相同的字符计数,并用数字替代,例如将 'aaa' 替换为 '3a'。
- 对于数字、字母、汉字以外的字符,可以用特殊字符代替,例如将 '-' 替换为 '#1'。
- 将替换后的字符串保存起来即可。
示例代码:
function compress(str) {
let count = 1;
let result = '';
for (let i = 1; i <= str.length; i++) {
if (str[i] === str[i-1]) {
count++;
} else {
if (count > 1) {
result += count;
}
result += str[i-1];
count = 1;
}
if (!/[a-zA-Z0-9\u4e00-\u9fa5]/.test(str[i-1])) {
result += '#'+str.charCodeAt(i-1);
}
}
return result;
}
字符串解压算法:
- 遍历字符串,将数字与字符拆分开来,例如将 '3a' 拆分为 'aaa'。
- 将特殊字符替换回原来的字符,例如将 '#1' 替换回 '-'。
- 将解压后的字符串保存起来即可。
示例代码:
function decompress(str) {
let result = '';
let countStr = '';
for (let i = 0; i < str.length; i++) {
if (/\d/.test(str[i])) {
countStr += str[i];
} else {
if (countStr) {
const count = parseInt(countStr, 10);
result += str[i].repeat(count);
countStr = '';
} else {
if (str[i] === '#') {
const charCode = parseInt(str.slice(i+1, i+4), 10);
result += String.fromCharCode(charCode);
i += 3;
} else {
result += str[i];
}
}
}
}
return result;
}
示例测试:
const str = '发-bold-fontSize16-italic';
const compressedStr = compress(str);
console.log(compressedStr); // "发#8203-bold-fontSize16-#8203italic"
const decompressedStr = decompress(compressedStr);
console.log(decompressedStr); // "发-bold-fontSize16-italic"
``
原文地址: https://www.cveoy.top/t/topic/fIna 著作权归作者所有。请勿转载和采集!