题解 | #字符串加密#

字符串加密

http://www.nowcoder.com/practice/e4af1fe682b54459b2a211df91a91cf3

  • 保姆级代码注释详解

alt

import java.io.*;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        String str = bufferedReader.readLine();
        char[] target = bufferedReader.readLine().toCharArray();
        char[] chars = str.toCharArray();
        // 原始字母表
        Map<Character, Integer> letterMap = new TreeMap<>();
        for (int i = 0; i < 26; i++) {
            letterMap.put((char) ((int) 'a' + i), i);
        }
        // 新字母表
        List<Character> letterListNew = new LinkedList<>();
        // 遍历数据创建密钥字母表
        for (int i = 0; i < chars.length; i++) {
            if (Character.isLetter(chars[i])){
                // 建表时忽略大小写
                char c = String.valueOf(chars[i]).toLowerCase().charAt(0);
                // 若新字母表包含这个字母跳过
                if (letterListNew.contains(c)){
                    continue;
                }
                // 否则添加,并删除其在旧字母表中的信息
                else {
                    letterListNew.add(c);
                    letterMap.remove(c);
                }
            }
        }
        // 遍历填满剩下的字母
        for (Character character : letterMap.keySet()) {
            letterListNew.add(character);
        }
        // 暂存加密后的信息
        StringBuilder stringBuilder = new StringBuilder();
        // 遍历要加密的信息
        for (int i = 0; i < target.length; i++) {
            // 若是字母则加密
            if (Character.isLetter(target[i])){
                // 找到原始字母表中的顺序
                int i1 = (int)target[i] - (int)'a';
                // 插入当前字母表中该位置的字母
                stringBuilder.append(letterListNew.get(i1));
            }
            // 不是字母则直接插入
            else {
                stringBuilder.append(target[i]);
            }
        }

        System.out.println(stringBuilder.toString());
    }


}

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-10 11:45
你不要过来啊啊啊啊啊啊啊
码农索隆:对面:“今天你不面也得面”
点赞 评论 收藏
分享
06-02 15:17
门头沟学院 Java
心爱的idea:怎么会呢 应该是打招呼有问题 问就说实习6个月全国可飞随时到岗
点赞 评论 收藏
分享
强大的马里奥:不太可能,我校计算机硕士就业率99%
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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