华为秋招2017年8月笔试

1.1 拼音与英文互相转换

编写一个拼音与英文互相转换的函数,如果输入的电话号码是英文单词,输出对应的电话号码的中文拼音。如果输入的电话号码是中文拼音,输出对应的电话号码的英文单词。
例如:输入“DoubleOneTwoThreeFour”,则输出”YiYiErSanSi“。
1.2 拼音、英文读法表
Yi Er San Si Wu Liu Qi Ba Jiu 
One Two Three Four Five Six Seven Eight Nine

注意:每个单词均为大写字母开关,遇到连续两个相同数字,输入可以前面加Double,输出不可以加Double。
1.3 输入描述
由首字母大写组成的字符串,表示一个电话号码的英文单词或者中文拼音,字符输入范围为数字0-9的英文单词或中文拼音。
1.4 输出描述
根据输入字符串, 输出对应的电话号码字符串,如果输入的电话号码是英文单词,输出对应的电话号码的中文拼音。如果输入的电话号码是中文拼音,输出对应的电话号码的英文单词。
1.5 重要知识

根据map的value值获取key值
Set<String> kset = map.keySet();
String str="Yi";
for (String ks : kset) {
    if ((str.equals(map.get(ks))) {
        System.out.print(sk);
    }
}
 */



public class Main01 {
		public static void main(String[] args) {
			Scanner sc=new Scanner(System.in);
			while (sc.hasNext()) {
				String str=sc.nextLine();
				printRes(str);
			}
		}

		private static void printRes(String str) {
			Map<String, String>map=new HashMap<String, String>();
			map.put("Zero", "Ling"); //key value 类似于查询字典
			map.put("One", "Yi");
			map.put("Two", "Er");
			map.put("Three","San");
			map.put("Four", "Si");
			map.put("Five", "Wu");
			map.put("Six", "Liu");
			map.put("Seven", "Qi");
			map.put("Eight", "Ba");
			map.put("Nine", "Jiu");
			//str是输入的全部字符串  DoubleOneTwoThreeFour  大写字母的Acii码的数值是:65-90
			
			int index=0,len=0;
			List<String>list=new ArrayList<>();
			for (int i = 0; i < str.length(); i++) {
				if (str.charAt(i)>=65 && str.charAt(i)<=90) {//大写字母的ACII码
					String sub=str.substring(index, index+len+1);//截取一个单词
					if (i>0) {
						list.add(sub);
//						System.out.println(sub);//最后一个字符串处理不到
					}
					len=0;
					index=i;
				}else {
					len++;
				}
			}
			//处理最后一个子串
			String sub2=str.substring(index,str.length());
			list.add(sub2);
			
			//存储结果
			StringBuffer sb=new StringBuffer();
			
			//遍历list进行计算输出
			Set<String> kset = map.keySet();// 根据value 取可key值
			for (int i = 0; i < list.size(); i++) {
				if (list.get(i).equals("Double")) {
					if (map.containsKey(list.get(i+1))) {//输入的是英文
						sb.append(map.get(list.get(i+1)));//返回指定键所映射的值  根据key取value
					}else {//if(map.containsValue(list.get(i)))//输入的是中文拼音   根据value 取可key值
						for (String ks : kset) {
						    if (((list.get(i+1)).equals(map.get(ks)))){//sk 是key
						    	sb.append(ks);
						    }
						}
					}
				}
				else{//不含有double 则都是单独出现
					if (map.containsKey(list.get(i))) {
						sb.append(map.get(list.get(i)));//根据key取value
					}
					else if (map.containsValue(list.get(i))) {
						for (String ks : kset) {
						    if (((list.get(i)).equals(map.get(ks)))){//sk 是key
						    	sb.append(ks);
						    }
						}
					}
				}
			}
			System.out.println(sb.toString());
		}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值