題目描述
- 輸入字符串為中文拼音號碼串或者英文號碼串,如果輸入是中文拼音號碼串則轉成英文號碼串,如果輸入是英文號碼串則轉成中文號碼串。
- 特殊情況是英文號碼串會出現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);
}
}
