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<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);
    }
}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM