题解 | #字符串加密#
字符串加密
http://www.nowcoder.com/practice/e4af1fe682b54459b2a211df91a91cf3
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
//将key转化成大写 建立映射关系
String key =sc.nextLine().toUpperCase();
String str = sc.nextLine();//要加密的字符串
char[] keyArr = key.toCharArray();
//char[] strArr = str.toCharArray();
//1 建立 key连接之后的字母表
//用set 自动去重
LinkedHashSet<Character> set = new LinkedHashSet();
//先把key加到set
for(int i=0;i<keyArr.length;i++){
set.add(keyArr[i]);
}
//再把剩下的字母加进去
for(char c='A';c<='Z';c++){
set.add(c);
}
//2 建立 与原始的26个字母之间的映射关系(ascii)
int[] arr = new int[128];
//用原始字母当下标,然后用新建立的set赋值
char ch = 'A';
for (Character c: set){
arr[ch]=c;
ch++;
}
//3 遍历加密的字符串,去找对应的映射,注意判断,是小写字母的话,先转化成大写,再转为小写
StringBuilder sb = new StringBuilder();
for(int i=0;i<str.length();i++){
char c1 = str.charAt(i);
if(c1>='a' && c1<='z'){
c1=(char)(c1-32);
sb.append((char)(arr[c1]+32));
}else if(c1==' '){
sb.append(c1);
}else{
sb.append((char)arr[c1]);
}
}
//4 打印
System.out.println(sb.toString());
}
}
}
//A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
//N I H A O