Excel 单元格地址有两种格式: 普通格式,如:A5, BC12 对应的RC格式:R5C1, R12C55 显然,RC格式是直接给出行号和列号 请编程在两种地址格式间转换。 这道题是对Java蓝桥杯中的一道题进行的扩展,首先需要找出两种格式之间的关系,通过观察可以发现,A5-->R5C1,A表示的是列号1(A,B,C......Z分别代表1,2,3......26),5代表行号5,BC代表的是列号是2×26+3=55,12代表行号12,所以BC12-->R12C55,这道题实质上就是一道进制转换的题,关键在于BC和55之间的转换。 下面附上我写的代码: package class2; public class C { public static void main(String[] args) { String s1="R12C55"; String s2="BC12"; func1(s2);//BC12-->R12C55 func2(s1);//R12C55-->BC12 } public static void func1(String s){ //BC12-->R12C55 int row=0; int col=0; for(int i=0;i<s.length();i++){ char c=s.charAt(i); if(c>='A'&&c<='Z'){ col=col*26+(c-'A'+1); }else{ row=row*10+(c-'0'); } } System.out.println("R"+row+"C"+col); } public static void func2(String s){ //R12C55-->BC12 int row=0; int col=0; int a=s.indexOf('R'); int b=s.indexOf('C'); for(int i=a+1;i<b;i++){ char c=s.charAt(i); row=row*10+(c-'0'); //得到行号 } for(int j=b+1;j<s.length();j++){ char c=s.charAt(j); col=col*10+(c-'0'); //得到列号 } String s2=""; for(;;){ if(col==0) break; s2=(char) ('A'+col%26-1)+s2; col/=26; } System.out.println(s2+row); } }
|