密码是我们生活中非常重要的东东,我们的那么一点不能说的秘密就全靠它了。哇哈哈. 接下来渊子要在密码之上再加一套密码,虽然简单但也安全。
假设渊子原来一个BBS上的密码为zvbo9441987
,为了方便记忆,他通过一种算法把这个密码变换成YUANzhi1987
,这个密码是他的名字和出生年份,怎么忘都忘不了,而且可以明目张胆地放在显眼的地方而不被别人知道真正的密码。
他是这么变换的,大家都知道手机上的字母: 1--1, abc--2, def--3, ghi--4, jkl--5, mno--6, pqrs--7, tuv--8 wxyz--9, 0--0
,就这么简单,渊子把密码中出现的小写字母都变成对应的数字,数字和其他的符号都不做变换,
声明:密码中没有空格,而密码中出现的大写字母则变成小写之后往后移一位,如:X,先变成小写,再往后移一位,不就是y了嘛,简单吧。记住,z往后移是a哦。
输入描述:
输入包括多个测试数据。输入是一个明文,密码长度不超过100个字符,输入直到文件结尾
输出描述:
输出渊子真正的密文
示例
输入
YUANzhi1987
输出
zvbo9441987
使用加密后的密码串,解出原始的密码。
首先,小写字母,需要对应手机键盘上的内容,去得到一个数字。
我这里使用一个二维数组保存键盘上的对应关系,当然,你也可以使用 map 来存储。
String[][] strings = new String[][]{
{"abc","2"},{"def","3"},
{"ghi","4"},{"jkl","5"},{"mno","6"},
{"pqrs","7"},{"tuv","8"},{"wxyz","9"}
};
现在来看这个数组,我是这麽想的,在输入的密码串中,先转换为一个字符数组,使用 toCharArray
方法,接着循环这个字符数组,在循环的内部,再去遍历这个二维数组,当二维数组的 strings[j][0]
元素包含了当前循环到的字符时,表示当前字符的数值就是 strings[j][1]
。
举个例子,就是说,假如当前的字符是 'z'
,那么循环到 string[7][0]
的位置时,得到对应字符串是 “wxyz”
,当判断 z
包含在 wxyz
中时,就取出 “9”
拼接到最终结果上。
然后是大写字母的处理,先转换为小写字母。
在同为字符的情况下 :
// 32
System.out.println('a' - 'A');
因此, 字符 'a' == (char)('A' + 32)
然后是后移,就是在转换为小写之后,在加1;
特殊照顾一下 ‘z’,当转换为小写之后,字符若果是 ‘z’ ,就拼接上 ‘a’。
最后,是数字:不变,直接拼接。
import java.util.Scanner;
/**
* Created by Feng on 2020/2/17 14:08
* CurrentProject's name is java8
* 简单密码
*/
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String[][] strings = new String[][]{
{"abc","2"},{"def","3"},
{"ghi","4"},{"jkl","5"},{"mno","6"},
{"pqrs","7"},{"tuv","8"},{"wxyz","9"}
};
while(input.hasNext()){
String line = input.next();
char[] chars = line.toCharArray();
StringBuilder sb = new StringBuilder();
for (char aChar : chars) {
// 小写字母
if (aChar >= 'a' && aChar <= 'z') {
for (String[] string : strings) {
boolean contains = string[0].contains(String.valueOf(aChar));
if (contains) {
sb.append(string[1]);
}
}
}
// 大写字母
if(aChar >= 'A' && aChar <= 'Z'){
// 转换为小写字母并向后移一位
int temp = aChar + 32;
// 当为 z 时,后移一位是 a
if((char)temp == 'z'){
sb.append('a');
} else {
sb.append((char)(temp + 1));
}
}
// 数字
if(aChar >= '0' && aChar <= '9'){
sb.append(aChar);
}
}
System.out.println(sb);
}
}
}