java实战字符串2:中英字符串相互转换


题目描述
  1. 输入字符串为中文拼音号码串或者英文号码串,如果输入是中文拼音号码串则转成英文号码串,如果输入是英文号码串则转成中文号码串。
  2. 特殊情况是英文号码串会出现Double + 英文数字或者拼音数值。如果是英文则可以正常转换,如果是拼音则返回“ERROR”。
解答要求时间限制:1000ms, 内存限制:256MB 输入

输入为中文拼音数字串(用例保证中文数字串均为数字拼音),或者英文数字串(可能带Double)

输出

输出为输入的 中->英 或 英->中 的转换,如果遇到double+中拼音时输出“ERROR”

样例1

输入

YiWuSanJiuSi

输出

OneFiveThreeNineFour
样例 2

输入

OneFourThreeDoubleZero

输出

YiSiSanLingLing
样例 3

输入

OneFourThreeDoubleLiu

输出

ERROR
备注:当中文转英文时,如果是LiuLiu情况需要转换成DoubleSix   解析:
public class Main {
    private static String[] en = {"Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"};
    private static String[] zh = {"Ling", "Yi", "Er", "San", "Si", "Wu", "Liu", "Qi", "Ba", "Jiu"};
    private static List enArr = Arrays.asList(en); // 这种方式的转的list不能执行追加的操作,否则会抛异常,只用于找下标
    private static List zhArr = Arrays.asList(zh);

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        ArrayList arr = strToArr(sc.nextLine());
        // 判断是英文转中文还是中文转英文
        boolean flag = true;
        for (String s : arr) {
            if (zhArr.contains(s)) {
                flag = false;
                break;
            }
        }
        if (flag) { // 英转中
            enToZh(arr);
        } else {
            zhToEn(arr);
        }
    }

    // 函数1:将一个字符串按大写首字母分割,并保存到ArrayList中
    public static ArrayList strToArr(String s) {
        ArrayList arr = new ArrayList<>();
        if (s.length() <= 1) {
            return arr;
        }
        int index = 0;
        for (int i = 1; i < s.length(); i++) {
            char cha = s.charAt(i);
            if (cha <= 'Z' && cha >= 'A') {
                arr.add(s.substring(index, i));
                index = i;
            }
            if (i == s.length() - 1) {
                arr.add(s.substring(index));
            }
        }
        return arr;
    }

    // 函数2:英文转中文
    public static void enToZh(ArrayList arr) {
        StringBuffer bf = new StringBuffer();
        for (int i = 0; i < arr.size(); i++) {
            if (arr.get(i).equals("Double")) {
                if (zhArr.contains(arr.get(i + 1))) {
                    System.out.println("ERROR");
                    return;
                } else {
                    int index = enArr.indexOf(arr.get(i + 1));
                    bf.append(zh[index]);
                    bf.append(zh[index]);
                    i++;
                }
            } else {
                int index = enArr.indexOf(arr.get(i));
                bf.append(zh[index]);
            }
        }
        System.out.println(bf.toString());
    }

    // 函数3:中文转英文
    public static void zhToEn(ArrayList arr) {
        if (arr.contains("Double")) {
            System.out.println("ERROR");
            return;
        }
        StringBuffer bf = new StringBuffer();
        for (int i = 0; i < arr.size(); i++) {
            String cur = arr.get(i);
            if (i + 1 < arr.size() && arr.get(i).equals(arr.get(i + 1))) {
                bf.append("Double");
            } else {
                int index = zhArr.indexOf(arr.get(i));
                bf.append(en[index]);
            }
        }
        System.out.println(bf);
    }
}