java实战字符串2:中英字符串相互转换
题目描述
- 输入字符串为中文拼音号码串或者英文号码串,如果输入是中文拼音号码串则转成英文号码串,如果输入是英文号码串则转成中文号码串。
- 特殊情况是英文号码串会出现Double + 英文数字或者拼音数值。如果是英文则可以正常转换,如果是拼音则返回“ERROR”。
输入为中文拼音数字串(用例保证中文数字串均为数字拼音),或者英文数字串(可能带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 ListenArr = 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); } }