描述 | |
---|---|
知识点 | 字符串 |
运行时间限制 | 10M |
内存限制 | 128 |
输入 | 先输入key和要加密的字符串 |
输出 | 返回加密后的字符串 |
样例输入 | nihao ni |
样例输出 | le |
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String key = sc.next();
String data = sc.next();
sc.close();
System.out.println(encrypt(key, data));
}
private static String encrypt(String key, String data){ //生成加密后的字母表
key = key.toUpperCase() + "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; //让加密后的字母表全部都是大写字母
String[] temp = key.split("");
String crypt = "";
for(int i = 1; i < temp.length; i++){ //如果之前出现过的字母,则不再添加
if(!crypt.contains(temp[i]))
crypt = crypt + temp[i];
}
StringBuilder stb = new StringBuilder();
for(int i = 0; i < data.length(); i++){
if(data.charAt(i) >= 'a' && data.charAt(i) <= 'z'){ //如果是小写的明文,则ascii码减去97刚好对应上加密后的字母表
int index1 = data.charAt(i) - 97; //比如a,asscii码97,减去97刚好对应字母表的第一个字母
String result1 = String.valueOf(crypt.charAt(index1)).toLowerCase();//将获得的密文转换为小写
stb.append(result1);
}else{
int index2 = data.charAt(i) - 65; //如果是大写明文,则减去65
String result2 = String.valueOf(crypt.charAt(index2));
stb.append(result2);
}
}
return stb.toString();
}
}