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.运行情况

posted @ 2017-03-18 21:15  名字是卡的好  阅读(384)  评论(0编辑  收藏  举报