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

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM