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

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

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

输出

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

样例1

输入

YiWuSanJiuSi

输出

OneFiveThreeNineFour
样例 2

输入

OneFourThreeDoubleZero

输出

YiSiSanLingLing
样例 3

输入

OneFourThreeDoubleLiu

输出

ERROR
备注:当中文转英文时,如果是LiuLiu情况需要转换成DoubleSix
 
解析:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
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<String> enArr = Arrays.asList(en); // 这种方式的转的list不能执行追加的操作,否则会抛异常,只用于找下标
    private static List<String> zhArr = Arrays.asList(zh);
 
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        ArrayList<String> 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<String> strToArr(String s) {
        ArrayList<String> 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<String> 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<String> 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);
    }
}

  

posted @   Justin_Hu  阅读(2189)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示