zoukankan      html  css  js  c++  java
  • Java自定义加密字符串算法题目

    题目:两个人进行传递数据,数据是任意字符串,在传递中是加密的,加密规则如下,请实现该加密算法:
    1、字符串中存在数字字母和其他字符类型
    2、将字符串中的数字按照规则:每个数字字符都加上5,然后用和除以10的余数代替该位置的数字,
    3、将字符串中的字母则按照规则:按照字母表顺序围成一个圈,当前字母位置使用其后第3个字母来替代该字母, 例如字母 a 经过变换后为 d,字母 A 经过变换后为 D ,字母 z 经过变换后为 c
    4、其他字符则不进行变换
    5、再将第二位和倒数第二位的字符进行交换。

    实现:

    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * 题目:两个人进行传递数据,数据是任意字符串,在传递中是加密的,加密规则如下,请实现该加密算法:<p>
     * 1、字符串中存在数字字母和其他字符类型<p>
     * 2、将字符串中的数字按照规则:每个数字字符都加上5,然后用和除以10的余数代替该位置的数字,<p>
     * 3、将字符串中的字母则按照规则:按照字母表顺序围成一个圈,当前字母位置使用其后第3个字母来替代该字母,
     * 例如字母 a 经过变换后为 d,字母 A 经过变换后为 D ,字母 z 经过变换后为 c<p>
     * 4、其他字符则不进行变换<p>
     * 5、再将第二位和倒数第二位的字符进行交换。
     **/
    public class EncryptString {
        private static final Map<Character, Character> MAP = new HashMap<>();
    
        static {
            for (char c = '0'; c <= '9'; c++)
                MAP.put(c, (char) ((c + 5 - '0') % 10 + '0'));
    
            for (char c = 'a'; c <= 'z'; c++)
                MAP.put(c, (char) (c < 'x' ? c + 3 : c - 'x' + 'a'));
    
            for (char c = 'A'; c <= 'Z'; c++)
                MAP.put(c, (char) (c < 'X' ? c + 3 : c - 'X' + 'A'));
        }
    
        private static String encryptString(String s) {
            int len = s.length();
            if (len == 1) {
                return s;
            }
    
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < len; i++) {
                char c = (i == 1 || i == len - 2) ? s.charAt(len - i - 1) : s.charAt(i);
                sb.append(MAP.getOrDefault(c, c));
            }
            return sb.toString();
        }
    
        public static void main(String[] args) {
            String s = "On April 20, 2020, the WTI May contract price plunged 306% to -$37.63 per barrel";
            System.out.println(encryptString(s));
        }
    }
    

      

  • 相关阅读:
    关于springMVC转换json出现的异常
    jQuery实现,动态自动定位弹窗。JS分页,Ajax请求
    servlet为什么要配置web.xml
    Jmeter系列(4)- Jmeter 脚本录制
    后缀数组模板
    NOIP2016 玩脱记
    TERSUS无代码开发(笔记21)-流程执行顺序思考(转载)
    ===>===>===>特色思TERSUS常用功能整理
    TERSUS无代码开发(笔记20)-本地开发测试mysql数据库连接
    TERSUS无代码开发(笔记19)-mysql-connector-java-5.-bin.jar下载方法
  • 原文地址:https://www.cnblogs.com/areful/p/12981028.html
Copyright © 2011-2022 走看看