题解 | #字符串加密#

字符串加密

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());
        }
    }

}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务