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