描述
对输入的字符串进行加解密,并输出。
加密方法为:
当内容是英文字母时则用该英文字母的后一个字母替换,同时字母变换大小写,如字母a时则替换为B;字母Z时则替换为a;
当内容是数字时则把该数字加1,如0替换1,1替换2,9替换0;
其他字符不做变化。
解密方法为加密的逆过程。
数据范围:输入的两个字符串长度满足 1 \le n \le 1000 \1≤n≤1000 ,保证输入的字符串都是只由大小写字母或者数字组成
输入描述:
第一行输入一串要加密的密码
第二行输入一串加过密的密码输出描述:
第一行输出加密后的字符
第二行输出解密后的字符示例1
输入:
abcdefg BCDEFGH复制输出:
BCDEFGH abcdefg复制
package org.example.medium;
import java.util.Scanner;
public class Hj29 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()){
String s = scanner.nextLine().trim();
String s1 = scanner.nextLine().trim();
String encode = encode(castLength(s));
String decode = decode(castLength(s1));
System.out.println(encode);
System.out.println(decode);
}
}
public static String encode(String str){
StringBuilder sb = new StringBuilder("");
int h = (int) 'A' - (int) 'a';
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if(Character.isDigit(c)){
if(c=='9'){
sb.append('0');
}else {
char nc = (char) ((int) c +1);
sb.append(nc);
}
}else if(Character.isUpperCase(c)){
if(c=='Z'){
sb.append('a');
}else {
char nc = (char) ((int) c +1 -h);
sb.append(nc);
}
}else if(Character.isLowerCase(c)){
if(c=='z'){
sb.append('A');
}else {
char nc = (char) ((int) c +1 +h);
sb.append(nc);
}
}
}
return sb.toString();
}
public static String decode(String str){
StringBuilder sb = new StringBuilder("");
int h = (int) 'A' - (int) 'a';
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if(Character.isDigit(c)){
if(c=='0'){
sb.append('9');
}else {
char nc = (char) ((int) c -1);
sb.append(nc);
}
}else if(Character.isUpperCase(c)){
if(c=='A'){
sb.append('z');
}else {
char nc =(char) ((int) c -h -1);
sb.append(nc);
}
}else if(Character.isLowerCase(c)){
if(c=='a'){
sb.append('Z');
}else {
char nc = (char) ((int)c +h -1);
sb.append(nc);
}
}
}
return sb.toString();
}
public static String castLength(String str){
if(str.length()>1000){
str = str.substring(0, 1001);
}
return str;
}
}