题目要求:
加密方法为: 当内容是英文字母时则用该英文字母的后一个字母替换,同时字母变换大小写,如字母a时则替换为B;字母Z时则替换为a; 当内容是数字时则把该数字加1,如0替换1,1替换2,9替换0; 其他字符不做变化。 解密方法为加密的逆过程。 数据范围:输入的两个字符串长度满足 ,保证输入的字符串都是只由大小写字母或者数字组成
代码如下:
import java.util.Scanner;
public class EncryptDecryptString {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入需要加密/解密的字符串:");
String str = scanner.nextLine();
System.out.println("请选择加密或解密:1.加密 2.解密");
int choice = scanner.nextInt();
scanner.close();
String result = "";
switch (choice) {
case 1:
result = encrypt(str);
System.out.println("加密后的字符串为:" + result);
break;
case 2:
result = decrypt(str);
System.out.println("解密后的字符串为:" + result);
break;
default:
System.out.println("无效的选择!");
break;
}
}
/**
* 加密函数
*
* @param str 需要加密的字符串
* @return 加密后的字符串
*/
private static String encrypt(String str) {
StringBuilder result = new StringBuilder();
for (int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
if (Character.isLetter(ch)) {
ch = shiftChar(ch);
} else if (Character.isDigit(ch)) {
ch = shiftDigit(ch);
}
result.append(ch);
}
return result.toString();
}
/**
* 解密函数
*
* @param str 需要解密的字符串
* @return 解密后的字符串
*/
private static String decrypt(String str) {
StringBuilder result = new StringBuilder();
for (int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
if (Character.isLetter(ch)) {
ch = shiftChar(ch);
} else if (Character.isDigit(ch)) {
ch = shiftDigit(ch);
}
result.append(ch);
}
return result.toString();
}
/**
* 字母加密/解密函数
*
* @param ch 需要加密/解密的字母
* @return 加密/解密后的字母
*/
private static char shiftChar(char ch) {
if (Character.isLowerCase(ch)) {
return (char) ((ch - 'a' + 1) % 26 + 'A');
} else {
return (char) ((ch - 'A' + 1) % 26 + 'a');
}
}
/**
* 数字加密/解密函数
*
* @param ch 需要加密/解密的数字
* @return 加密/解密后的数字
*/
private static char shiftDigit(char ch) {
return (char) ((ch - '0' + 1) % 10 + '0');
}
}