背景:
Excel的列索引使用的是字母索引,某些开发中需要我们自己转换为数字,或者将数字转换为字母,比如基于Excel的公式,用户经常输入A1来表示引用Cell(0,0)的值。这时候我们需要把A转换为数字索引号;在显示的时候我们需要把0,0这样的坐标转换为A1显示,就需要把数字索引转换为字母索引。比如下面是LZ正做的一个项目,用到的:
废话不多说,直接看实现,下面是基于JavaScript的实现(转换为Java语言很容易),算法不做描述了,其实就是一个26进制的转换,可以参考16进制转换算法。
字母转换为数字:
/**
* 字母转换为数字
* @param {String} str
*/
function str2Num(str) {
var base = 'A'.charCodeAt(0);//找到A的码表大小
var r = 0;
for (var i = 0; i < str.length; i++) {//遍历每个位置
r = r * 26 + str.charCodeAt(i) - base + 1;
}
return r - 1;
};
上面算法不难理解,只要学过数据结构、算法的应该都知道那个“输入m输出m个1”二者类似,以此遍历每个位置,然后乘以该位置的基数即可。
数字转换为字母:
/**
* 将数字索引转换为英文字母
* @param {Number} colIndex
*/
function num2Str(colIndex) {
colIndex += 1;
if (colIndex <= 0) {
return "";
}
var str = "";
var result = "";
var A = 'A';
while (colIndex != 0) {
var num = colIndex % 26; // 取最后一位
var c = A.charCodeAt(0) + num - 1;
colIndex = Math.floor(colIndex / 26); //返回值小于等于其数值参数的最大整数值。
// 对于26的特殊处理
if (num == 0) {
//c = A.charCodeAt(0) + 26;
str = 'Z';
colIndex -= 1; //退位
} else {
str = String.fromCharCode(c);
}
// 3.插入
result += str;
}
if (result.length > 1) {
result = result.split('').reverse().join("");
}
return result;
};
数字转换为字母的算法类似10进制转换为16进制,其实就是求余。
下面是基于上面的Web小工具,用于行里字母数字索引转换,源码就不贴出来了,核心的都在上面,就是简单的包装了下,直接下载即可。
http://download.csdn.net/detail/hackersaillen/8797407