生成類似 excel 版本號 A ,B,C,...,Z AA,AB,..,AZ ...
阿新 • • 發佈:2019-05-17
生成類似 excel 版本號 A ,B,C,...,Z AA,AB,..,AZ ...
最近遇到一個需求:每次對一條記錄進行修改或指定操作,需要生成一個歷史版本,版本號需要採用類似excel表格的列號的形式,第一版本為A,第二版本為B,以此類推由A-Z,AA,AB,AC,...,AZ,ZZ,AAA-ZZZ。由於考慮到後面有根據版本號排序,根據版本號範圍查詢資料的需求,思考了一下,採用了資料庫的版本號欄位存的是數字1,2,3,4 ....分別對應A,,B,C,D ....,52對應AZ,這樣的一個對應關係,查詢到資料的時候把數字的版本號通過計算查詢出對應的字串版本(A,B,C...)在前臺展示。如果需要根據版本號去資料庫查詢資料,可以根據前臺傳入的字串版本號轉換後再拼接引數查詢,存數字最主要的是為了能更好的比較大小,下面把主要程式碼記錄一下,大家如果有什麼更好的解決方案,也可在下方留言大家一起討論。
/** * 將字串(a-z)轉換成數字 * 按照excel表格的列號(如:a-->1,z-->26,aa->27,az-52,....) * @param str * @return */ public static int str2int(String str){ char[] array = str.toCharArray(); int result = 0; for (int j = 0; j < array.length; j++) { result*=26; result+=char2int(array[j]); } return result; }; /** * 將字元轉換成整數 * @param ch * @return */ public static int char2int(char ch){ int result = -1; if(ch >= 'A' && ch <= 'Z'){ result = ch - 'A' + 1; }else if(ch >= 'a' && ch <= 'z'){ result = ch - 'a' + 1; } return result; } /** * 將1轉換成A,26轉換成Z,無限往後推,對應excel表格的列 * @param num * @return */ public static String int2Str(int num){ String result = ""; num = num <=0 ? 1 : num;//小於等於0是輸出A while(num > 0){ int m = num %26; if(m == 0) m = 26; result = (char)(m + 64) + result; num = (num-m)/26; } return result; }