题解 | #字符串加密#
字符串加密
https://www.nowcoder.com/practice/e4af1fe682b54459b2a211df91a91cf3
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNextLine()) {
String key = in.nextLine();
String text = in.nextLine();
List<Character> keyList = new ArrayList<>(26);
char[] keyArray = key.toCharArray();
//1. 转换为小写并去重后加入加密字典表keyList
for(int i=0; i<keyArray.length; i++){
char ch = Character.toLowerCase(keyArray[i]);
if(!keyList.contains(ch)){
keyList.add(ch);
}
}
//System.out.println(keyList);
//2. keyList字典表补充不存在的字母(26个字母需补全)获得一个完整的加密字典表
for(int i=0;i<26;i++){
//循环依次获得26个小写字母
char ch = (char)('a'+i);
//System.out.println(ch);
if(!keyList.contains(ch)){
keyList.add(ch);
}
}
//System.out.println(keyList);
//3. 明文加密
char[] arr = text.toCharArray();
StringBuilder strBuilder = new StringBuilder();
for(int i=0; i<arr.length; i++){
char tmp = arr[i];
char lowCh = Character.toLowerCase(tmp);
if(keyList.contains(lowCh)){
boolean isUpper = Character.isUpperCase(tmp);
//获得原始字母表的索引
int index = lowCh-'a';
//System.out.println(tmp + " : " + index);
//字母加密:从加密字母表中获得对应索引的字母
char encodeChar = keyList.get(index);
if(isUpper){
//如果原来是大写字母,则加密后也转换为大写
encodeChar = Character.toUpperCase(encodeChar);
}
strBuilder.append(encodeChar);
}else{
//不在字典表中的原样输出,比如空格符
strBuilder.append(tmp);
}
}
System.out.println(strBuilder.toString());
}
}
}