Excel 地址 行列转换
一.输入Excel地址转行列
1.问题描述
Excel地址转换。例如:A1 ------>(1,1) AA1------>(1,27) BX23----->(23,76)
2.解题思路
1.1 首先判断输入的内容是否满足要求。若输入内容有不为数字且不为英文字母的字符,要求重新输入。
1.2 若所得串s满足要求,将串中的英文字母与数字分为两个串s1和s2分别对应行和列,
再分别对s1和s2的合理性进行判断。其中s1长度不应超过2位,s2中不能出现出数字之外的字符。
1.3 将s1、s2分别转成对应数字a、b。输出(a,b)
详情如下图:
3.程序
import java.util.Scanner; //2017.03.18 //2.Excel地址转换 A1---》(1,1) AA5---》(5,27) 反向? public class W03182 { static Scanner scan = new Scanner(System.in); //将字母表示的列数转换为数字 static int zhuan_huan1(String s){ if(s.length()==1) return (int)s.charAt(0)-'A'+1; return ((int)s.charAt(0)-'A'+1)*26 + zhuan_huan1(s.substring(1)); } //将代表行列数的两个串转换为数字 static void zhuan_huan(String s1,String s2){ int a = Integer.parseInt(s1); int b = zhuan_huan1(s2); System.out.println(String.format("(%d,%d)", a,b)); } //键盘输入Excel地址,进行转换 static void work(){ while(true){ System.out.println("如要退出请输入q"); System.out.println("请输入:"); scan = new Scanner(System.in); String s = scan.nextLine().toUpperCase(); if(s.trim().equals("Q")) break; try{ if(s.charAt(0)<'A'||s.charAt(0)>'Z') throw new Exception(); for(int i=0;i<s.length();i++){ if((s.charAt(i)<'A'||s.charAt(i)>'Z')&&(s.charAt(i)<'0'||s.charAt(i)>'9')) throw new Exception(); } int k = 0; for(int i=0;i<s.length();i++){ if(s.charAt(i)>='1'&&s.charAt(i)<='9'){ k = i; break; } } String s2 = s.substring(0, k); //列 String s1 = s.substring(k); //行 if(s1.charAt(0)=='0') throw new Exception(); for(int i=1;i<s1.length();i++){ if(s.charAt(i)<'0'||s.charAt(i)>'9') throw new Exception(); } zhuan_huan(s1,s2); }catch(Exception e){ System.out.println("输入有误,请重新输入。"); } } } public static void main(String[] args) { work(); } }
4.运行情况。
二.输入行 列 转Excel地址
1.问题描述
在键盘输入行和列,转换为excel地址。如:12 1 ----> A12 12 28 -----> AB12
2.解题思路
输入行列,行分别转为数字和对应英文字母。
3.程序
import java.util.Scanner; //2017.03.18 //2.Excel地址转换 A1---》(1,1) AA5---》(5,27) 反向? public class W03182 { static Scanner scan = new Scanner(System.in); static void work2(){ while(true){ System.out.println("如要退出请输入q"); System.out.println("请输入行:"); scan = new Scanner(System.in); String s1 = scan.nextLine().toUpperCase(); if(s1.trim().equals("Q")) break; System.out.println("如要退出请输入q"); System.out.println("请输入列:"); scan = new Scanner(System.in); String s2 = scan.nextLine().toUpperCase(); if(s2.trim().equals("Q")) break; int a = 0; int b = 0; try{ a = Integer.parseInt(s1); b = Integer.parseInt(s2); }catch(Exception e){ System.out.println("输入有误,请重新输入。"); } huan_zhuan(a,b); } } static void huan_zhuan(int a,int b){ System.out.println(huan_zhuan1(b)+a); } static String huan_zhuan1(int b){ String s = ""; if(b<26) return ""+(char)('A'+b-1); int k = 0; while(b>26){ k++; b = b - 26; } s = ""+(char)('A'+k-1)+(char)('A'+b-1); return s; } public static void main(String[] args) { //work(); work2(); } }
4.运行情况