字符串-04-字符串加解密
文章目录
- 1. 题目描述
- 2. 思路
- 3. 代码
1. 题目描述
对输入的字符串进行加解密,并输出。
- 加密方法为:
- 当内容是英文字母时则用该英文字母的后一个字母替换,同时字母变换大小写,如字母a时则替换为B;字母Z时则替换为a;
- 当内容是数字时则把该数字加1,如0替换1,1替换2,9替换0;
- 其他字符不做变化。
- 解密方法为:加密的逆过程。
- 数据范围:输入的两个字符串长度满足 1 ≤ n ≤ 1000 1≤n≤1000 1≤n≤1000 ,保证输入的字符串都是只由大小写字母或者数字组成。
输入描述:
第一行输入一串要加密的密码
第二行输入一串加过密的密码
输出描述:
第一行输出加密后的字符
第二行输出解密后的字符
示例1:
- 输入:
abcdefg
BCDEFGH - 输出:
BCDEFGH
abcdefg
2. 思路
Character包装类提供了一套方法可以判断数字、字母(大小写),直接使用即可。只需要注意:
- 注意边界值
a
、z
、A
、Z
特殊处理。 - 使用for-each得到的是char数组中元素的副本,不会对其进行修改。如需修改使用fori。
- char类型转为String类型,注意不能是toString()。
3. 代码
代码1:
public static void main(String[] args) {Scanner in = new Scanner(System.in);while (in.hasNextLine()) {String s1 = in.nextLine();String s2 = in.nextLine();//加密过程char[] array1 = s1.toCharArray();for (int i = 0; i < array1.length; i++) {if (Character.isLetter(array1[i])){if (Character.isUpperCase(array1[i])){char lowerCase = Character.toLowerCase(array1[i]);if (array1[i] < 'Z'){array1[i] = (char)(lowerCase + 1);}else {array1[i] = 'a';}}else if (Character.isLowerCase(array1[i])){char upperCase = Character.toUpperCase(array1[i]);if (array1[i] < 'z'){array1[i] = (char) (upperCase + 1);}else {array1[i] = 'A';}}}else if (Character.isDigit(array1[i])){int numericValue = (Character.getNumericValue(array1[i]) + 1)% 10;//转为十进制数字array1[i] = Character.forDigit(numericValue, 10);}}//解密过程char[] array2 = s2.toCharArray();for (int i = 0; i < array2.length; i++) {if (Character.isLetter(array2[i])){if (Character.isUpperCase(array2[i])){char lowerCase = Character.toLowerCase(array2[i]);if (array2[i] > 'A'){array2[i] = (char)(lowerCase - 1);}else {array2[i] = 'z';}}else if (Character.isLowerCase(array2[i])){char upperCase = Character.toUpperCase(array2[i]);if (array2[i] > 'a'){array2[i] = (char) (upperCase - 1);}else {array2[i] = 'Z';}}}else if (Character.isDigit(array2[i])){int numericValue = (Character.getNumericValue(array2[i]) - 1);if (numericValue < 0){numericValue = 9;}//转为十进制数字array2[i] = Character.forDigit(numericValue, 10);}}System.out.println(String.valueOf(array1));System.out.println(String.valueOf(array2));}
}
代码2:(抽取方法、使用StringBuilder)
import java.util.Scanner;public class EncryptDecrypt {public static void main(String[] args) {Scanner in = new Scanner(System.in);while (in.hasNextLine()) {String s1 = in.nextLine();String s2 = in.nextLine();String encrypted = encrypt(s1);String decrypted = decrypt(s2);System.out.println(encrypted);System.out.println(decrypted);}in.close();}private static String encrypt(String input) {StringBuilder result = new StringBuilder();for (char c : input.toCharArray()) {if (Character.isLetter(c)) {if (Character.isUpperCase(c)) {result.append(c == 'Z' ? 'a' : (char) (c + 1));} else {result.append(c == 'z' ? 'A' : (char) (c + 1));}} else if (Character.isDigit(c)) {result.append((char) ('0' + (Character.getNumericValue(c) + 1) % 10));} else {result.append(c); // 保留其他字符不变}}return result.toString();}private static String decrypt(String input) {StringBuilder result = new StringBuilder();for (char c : input.toCharArray()) {if (Character.isLetter(c)) {if (Character.isUpperCase(c)) {result.append(c == 'A' ? 'Z' : (char) (c - 1));} else {result.append(c == 'a' ? 'z' : (char) (c - 1));}} else if (Character.isDigit(c)) {int newValue = Character.getNumericValue(c) - 1;result.append(newValue < 0 ? '9' : (char) ('0' + newValue));} else {result.append(c); // 保留其他字符不变}}return result.toString();}
}
以上为个人学习分享,如有问题,欢迎指出:)