描述
现在有一种密码变换算法。
九键手机键盘上的数字与字母的对应: 1--1, abc--2, def--3, ghi--4, jkl--5, mno--6, pqrs--7, tuv--8 wxyz--9, 0--0,把密码中出现的小写字母都变成九键键盘对应的数字,如:a 变成 2,x 变成 9.
而密码中出现的大写字母则变成小写之后往后移一位,如:X ,先变成小写,再往后移一位,变成了 y ,例外:Z 往后移是 a 。
数字和其它的符号都不做变换。
数据范围: 输入的字符串长度满足 1≤n≤100 1≤n≤100
输入描述:
输入一组密码,长度不超过100个字符。
输出描述:
输出密码变换后的字符串
示例1
输入:
YUANzhi1987输出:zvbo9441987
最终代码实现
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;/*** 考点 英文字符大小写转换 * 大写转换成小写 +32* 小写转换成大写 -32*/
public class HJ21 {//定义map容器存储按键对应数字字符的容器private static Map<String,String> map = new HashMap<>();//静态初始化、加载map容器static{//与题干中的拼音九键相对应map.put("1","1");map.put("abc","2");map.put("def","3");map.put("ghi","4");map.put("jkl","5");map.put("mno","6");map.put("pqrs","7");map.put("tuv","8");map.put("wxyz","9");map.put("0","0");}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);String input = scanner.nextLine();char[] charArray = input.toCharArray();StringBuilder builder = new StringBuilder();for (char c:charArray){//数字保持不变if (c>='0' &&c<='9'){builder.append(String.valueOf(c));}else if(c>='A' &&c<='Y'){//大写转换成小写,然后相后移动一位char newChar = (char)(c+32+1);//或者char lowerCase = Character.toLowerCase(c);char newChar = (char)(lowerCase+1);builder.append(String.valueOf(newChar));}else if (c=='Z'){//特殊的Zbuilder.append('a');}else{//小写的处理Set<String> keys = map.keySet();for (String key:keys){if(key.contains(String.valueOf(c)))builder.append(map.get(key));}}}System.out.println(builder.toString());}
}