有一串数字加逗号组成的字符串,长度嘛从几十到几千不等,每组数字都有唯一性,每组数字之间由逗号进行分隔,
如下:
10452,10455,10458,10472,10498,10499,10500,10501,10502,10510,10511用什么方法才能将此字符串压缩成很短的字符串,还能够解出来求教,用JS的方法,谢谢
如下:
10452,10455,10458,10472,10498,10499,10500,10501,10502,10510,10511用什么方法才能将此字符串压缩成很短的字符串,还能够解出来求教,用JS的方法,谢谢
//如果是的话,可以这么做:
function compress(s) {
var array = s.split(',');
return String.fromCharCode.apply(null, array);
}
function extract(s) {
var array = [];
var len = s.length;
for (var i = 0; i < len; i++) {
array.push(s.charCodeAt(i));
}
return array.join(',');
}
var s = '10452,10455,10458,10472,10498,10499,10500,10501,10502,10510,10511';
var c = compress(s);
var e = extract(c);
alert(s);
alert(c);
alert(e);
//如果是的话,可以这么做:
function compress(s) {
var array = s.split(',');
return String.fromCharCode.apply(null, array);
}
function extract(s) {
var array = [];
var len = s.length;
for (var i = 0; i < len; i++) {
array.push(s.charCodeAt(i));
}
return array.join(',');
}
var s = '10452,10455,10458,10472,10498,10499,10500,10501,10502,10510,10511';
var c = compress(s);
var e = extract(c);
alert(s);
alert(c);
alert(e);
0-9a-zA-Z分别代表其中的数字。。
// 压缩算法1,处理范围:0~0xFFFF(0~65535)整数
function compress(s) {
var array = s.split(',');
return String.fromCharCode.apply(null, array);
}
function extract(s) {
var array = [];
var len = s.length;
for (var i = 0; i < len; i++) {
array.push(s.charCodeAt(i));
}
return array.join(',');
}// 压缩算法2,处理范围:0~JS可表示的最大整数,可大于0xFFFFFFFF(4294967295)
function compress2(s) {
var array = s.split(',');
var len = array.length;
for (var i = 0; i < len; i++) {
array[i] = Number(array[i]).toString(36);
}
return array.join(',');
}
function extract2(s) {
var array = s.split(',');
var len = array.length;
for (var i = 0; i < len; i++) {
array[i] = parseInt(array[i], 36);
}
return array.join(',');
}// 压缩算法3:处理范围:0~0xFFFFFFFF(0~4294967295)整数
function compress3(s) {
var array = s.split(',');
var array2 = [];
var len = array.length;
for (var i = 0; i < len; i++) {
var n = array[i];
var low = n % 0x100;
var high = (n - low) / 0x100;
array2.push(low);
array2.push(high);
}
return String.fromCharCode.apply(null, array2);
}
function extract3(s) {
var array = [];
var len = s.length;
for (var i = 0; i < len; i+=2) {
var low = s.charCodeAt(i);
var high = s.charCodeAt(i+1);
array.push(low + high * 0x100);
}
return array.join(',');
}// 测试
function test1(s) {
var c = compress(s);
var e = extract(c);
alert(['压缩算法1:','压缩前:'+s,'解压后:'+e,'是否正确解压:'+(s==e),'压缩比:'+c.length+'/'+s.length,'压缩后:'+c].join('\n'));
}
function test2(s) {
var c = compress2(s);
var e = extract2(c);
alert(['压缩算法2:','压缩前:'+s,'解压后:'+e,'是否正确解压:'+(s==e),'压缩比:'+c.length+'/'+s.length,'压缩后:'+c].join('\n'));
}
function test3(s) {
var c = compress3(s);
var e = extract3(c);
alert(['压缩算法3:','压缩前:'+s,'解压后:'+e,'是否正确解压:'+(s==e),'压缩比:'+c.length+'/'+s.length,'压缩后:'+c].join('\n'));
}var s = '10452,10455,10458,10472,10498,10499,10500,10501,10502,10510,10511';
test1(s);
test2(s);
test3(s);var s = '10452,10455,10458,10472,10498,10499,10500,10501,10502,10510,10511,1000000';
test1(s);
test2(s);
test3(s);var s = '10452,10455,10458,10472,10498,10499,10500,10501,10502,10510,10511,1000000000000';
test1(s);
test2(s);
test3(s);