Java自定义加密字符串算法题目


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

实现:

import java.util.HashMap;
import java.util.Map;

/**
 * 题目:两个人进行传递数据,数据是任意字符串,在传递中是加密的,加密规则如下,请实现该加密算法:

* 1、字符串中存在数字字母和其他字符类型

* 2、将字符串中的数字按照规则:每个数字字符都加上5,然后用和除以10的余数代替该位置的数字,

* 3、将字符串中的字母则按照规则:按照字母表顺序围成一个圈,当前字母位置使用其后第3个字母来替代该字母, * 例如字母 a 经过变换后为 d,字母 A 经过变换后为 D ,字母 z 经过变换后为 c

* 4、其他字符则不进行变换

* 5、再将第二位和倒数第二位的字符进行交换。 **/ public class EncryptString { private static final Map 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)); } }