首页 > 试题广场 >

字符串加解密

[编程题]字符串加解密
  • 热度指数:256732 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

对输入的字符串进行加解密,并输出。

加密方法为:

当内容是英文字母时则用该英文字母的后一个字母替换,同时字母变换大小写,如字母a时则替换为B;字母Z时则替换为a;

当内容是数字时则把该数字加1,如0替换1,1替换2,9替换0;

其他字符不做变化。

解密方法为加密的逆过程。
数据范围:输入的两个字符串长度满足 ,保证输入的字符串都是只由大小写字母或者数字组成

输入描述:

第一行输入一串要加密的密码
第二行输入一串加过密的密码



输出描述:

第一行输出加密后的字符
第二行输出解密后的字符

示例1

输入

abcdefg
BCDEFGH

输出

BCDEFGH
abcdefg
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String str1 = in.nextLine();
        String str2 = in.nextLine();
        //使用字典法,简洁明了
        String a = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        String b = "BCDEFGHIJKLMNOPQRSTUVWXYZAbcdefghijklmnopqrstuvwxyza1234567890";
        StringBuilder out1 = new StringBuilder();
        StringBuilder out2 = new StringBuilder();
        for (int i = 0; i < str1.length(); i++) {
            out1.append(b.charAt(a.indexOf(str1.charAt(i))));
        }
        for (int i = 0; i < str2.length(); i++) {
            out2.append(a.charAt(b.indexOf(str2.charAt(i))));
        }
        System.out.println(out1);
        System.out.println(out2);
    }
}
编辑于 2024-01-10 19:35:04 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextLine()) { // 注意 while 处理多个 case
            String one = in.nextLine();
            char[] oneArr = one.toCharArray();
            String two = in.nextLine();
            char[] twoArr = two.toCharArray();
            StringBuffer enc = new StringBuffer();
            StringBuffer dec = new StringBuffer();
            for (char c : oneArr) {
                enc.append(convert(c,1));
            }

            for (char c : twoArr) {
                dec.append(convert(c,2));
            }
            System.out.println(enc);
            System.out.println(dec);
        }
    }

    private static char convert(char a, int type) {
        if (type == 1){
            if (a >= 'a' && a < 'z') {
                return (char) (a - 31);
            }
            if (a >= 'A' && a < 'Z') {
                return (char) (a + 33);
            }
            if (a >= '0' && a < '9') {
                return (char) (a + 1);
            }
            if (a == 'z') {
                return 'A';
            }
            if (a == 'Z') {
                return 'a';
            }
            if (a == '9') {
                return '0';
            }
        }else {
            if (a > 'a' && a <= 'z') {
                return (char) (a - 33);
            }
            if (a > 'A' && a <= 'Z') {
                return (char) (a + 31);
            }
            if (a > '0' && a <= '9') {
                return (char) (a - 1);
            }
            if (a == 'a') {
                return 'Z';
            }
            if (a == 'A') {
                return 'z';
            }
            if (a == '0') {
                return '9';
            }
        }
        return a;
    }
}

编辑于 2023-12-26 10:25:07 回复(0)
一对一线性关系,且数量较少,直接建表查找。
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        char[] in1 = in.nextLine().toCharArray();
        char[] in2 = in.nextLine().toCharArray();
        String src = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
        String code = "bcdefghijklmnopqrstuvwxyzaBCDEFGHIJKLMNOPQRSTUVWXYZA1234567890";
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < in1.length; i++) {
            sb.append(code.charAt(src.indexOf(in1[i])));
        }
        System.out.println(sb);

        sb.setLength(0);


        for (int i = 0; i < in2.length; i++) {
            sb.append(src.charAt(code.indexOf(in2[i])));
        }
        System.out.println(sb);
    }
}


发表于 2023-12-15 21:41:44 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String s1 = in.nextLine();
        String s2 = in.nextLine();
        StringBuilder encoding = new StringBuilder();
        StringBuilder decoding = new StringBuilder();
        for(int i = 0; i < s1.length(); i++){
            char c = s1.charAt(i);
            if( c >= 'a' && c <= 'z'){
                encoding.append((char)('A'+(c - 'a' + 1) % 26));
            }else if ( c >= 'A' && c <= 'Z'){
                encoding.append((char)('a'+(c - 'A' + 1) % 26));
            }else{
                encoding.append((char)('0'+(c - '0' + 1) % 10));
            }
        }
         for(int i = 0; i < s2.length(); i++){
            char c = s2.charAt(i);
            if( c >= 'a' && c <= 'z'){
                decoding.append((char)('Z'+(c - 'z' - 1) % 26));
            }else if ( c >= 'A' && c <= 'Z'){
                decoding.append((char)('z'+(c - 'Z' - 1) % 26));
            }else{
                decoding.append((char)('9'+(c - '9' - 1) % 10));
            }
        }
        System.out.println(new String(encoding));
        System.out.print(new String(decoding));
    }
}

发表于 2023-11-22 23:03:41 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNext()) { // 注意 while 处理多个 case
            char[] zip = in.nextLine().toCharArray();
            char[] unzip = in.nextLine().toCharArray();
            for (int i = 0; i < zip.length; i ++) {
                zip[i] = change(zip[i], 1);
            }
            for (int i = 0; i < unzip.length; i ++) {
                unzip[i] = change(unzip[i], -1);
            }
            System.out.println(new String(zip));
            System.out.println(new String(unzip));
        }
    }

    public static char change(char c, int k) {
        if (Character.isLowerCase(c)) {
            int val = (c - 'a' + k + 26) % 26;
            return (char)('A' + val);
        } else if (Character.isUpperCase(c)) {
            int val = (c - 'A' + k + 26) % 26;
            return (char)('a' + val);
        } else {
            int val = (c - '0' + k + 10) % 10;
            return (char)('0' + val);
        }
    }
}

发表于 2023-10-16 23:47:11 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String arr[]=new String [2];
        int index=0;
        while(in.hasNextLine()){
            arr[index]=in.nextLine();
            index++;
        }
        for(int i=0;i<arr[0].length();i++){
            if(i<arr[0].length()-1){
                if(arr[0].charAt(i)>='A'&&arr[0].charAt(i)<'Z'){
                    int num=((int)arr[0].charAt(i))+33;
                    System.out.print((char)num);
                }else if(arr[0].charAt(i)=='Z'){
                    System.out.print("a");
                }else if(arr[0].charAt(i)>='a'&&arr[0].charAt(i)<'z'){
                    int num=((int)arr[0].charAt(i))-31;
                    System.out.print((char)num);
                }else if(arr[0].charAt(i)=='z') {
                    System.out.print("A");
                }else if(arr[0].charAt(i)>='0'&&arr[0].charAt(i)<'9'){
                    int num=((int)arr[0].charAt(i))+1;
                    System.out.print((char)num);
                }else if(arr[0].charAt(i)=='9') {
                    System.out.print("0");
                }
            }else {
                if(arr[0].charAt(i)>='A'&&arr[0].charAt(i)<'Z'){
                    int num=((int)arr[0].charAt(i))+33;
                    System.out.println((char)num);
                }else if(arr[0].charAt(i)=='Z'){
                    System.out.println("a");
                }else if(arr[0].charAt(i)>='a'&&arr[0].charAt(i)<'z'){
                    int num=((int)arr[0].charAt(i))-31;
                    System.out.println((char)num);
                }else if(arr[0].charAt(i)=='z') {
                    System.out.println("A");
                }else if(arr[0].charAt(i)>='0'&&arr[0].charAt(i)<'9'){
                    int num=((int)arr[0].charAt(i))+1;
                    System.out.println((char)num);
                }else if(arr[0].charAt(i)=='9') {
                    System.out.println("0");
                }
            }

        }
        for(int i=0;i<arr[1].length();i++) {
            if (arr[1].charAt(i) > 'A' && arr[1].charAt(i) <= 'Z') {
                int num = ((int) arr[1].charAt(i)) + 31;
                System.out.print((char) num);
            } else if (arr[1].charAt(i) == 'A') {
                System.out.print("z");
            } else if (arr[1].charAt(i) > 'a' && arr[1].charAt(i) <= 'z') {
                int num = ((int) arr[1].charAt(i))-33;
                System.out.print((char) num);
            } else if (arr[1].charAt(i) == 'a') {
                System.out.print("Z");
            } else if (arr[1].charAt(i) > '0' && arr[1].charAt(i) <= '9') {
                int num = ((int) arr[1].charAt(i)) - 1;
                System.out.print((char) num);
            } else if (arr[1].charAt(i) == '0') {
                System.out.print("9");
            }

        }
    }
}

发表于 2023-09-16 12:21:12 回复(0)
应该是最简单明了的Java代码了:
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String encode = sc.next();
        String decode = sc.next();
        encode(encode);
        decode(decode);

    }

    public static void encode(String encode) {
        char[] chars = encode.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            if (Character.isUpperCase(chars[i])) {
                chars[i] = chars[i] == 'Z' ? 'a' : (char) (chars[i] + 1 + 32);
            } else if (Character.isLowerCase(chars[i])) {
                chars[i] = chars[i] == 'z' ? 'A' : (char) (chars[i] + 1 - 32);
            } else if (Character.isDigit(chars[i])) {
                chars[i] = chars[i] == '9' ? '0' : (char) (chars[i] + 1);
            }
        }

        System.out.println(String.valueOf(chars));
    }

    public static void decode(String decode) {
        char[] chars = decode.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            if (Character.isUpperCase(chars[i])) {
                chars[i] = chars[i] == 'A' ? 'z' : (char) (chars[i] - 1 + 32);
            } else if (Character.isLowerCase(chars[i])) {
                chars[i] = chars[i] == 'a' ? 'Z' : (char) (chars[i] - 1 - 32);
            } else if (Character.isDigit(chars[i])) {
                chars[i] = chars[i] == '0' ? '9' : (char) (chars[i] - 1);
            }
        }
        System.out.println(String.valueOf(chars));
    }
}


发表于 2023-08-11 20:56:43 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextLine()) { // 注意 while 处理多个 case
            String a = in.nextLine();
            String b = in.nextLine();

            System.out.println(encript(a));

            System.out.println(decript(b));
        }
    }

    public static String encript(String str){
        char[] data=str.toCharArray();
        for(int i=0;i<data.length;i++){
            char t=data[i];
            if(Character.isLetter(t)){
                if(t=='z'){
                    data[i]='A';
                }else if(t=='Z'){
                    data[i]='a';
                }else{
                    data[i]=(char)((t+1)^' ');
                }
            }else{
                if(t=='9'){
                    data[i]='0';
                }else{
                    data[i]=(char)(t+1);
                }
            }
        }

        return String.valueOf(data);
    }

    public static String decript(String str){
        char[] data=str.toCharArray();
        for(int i=0;i<data.length;i++){
            char t=data[i];
            if(Character.isLetter(t)){
                if(t=='a'){
                    data[i]='Z';
                }else if(t=='A'){
                    data[i]='z';
                }else{
                    data[i]=(char)((t-1)^' ');
                }
            }else{
                if(t=='0'){
                    data[i]='9';
                }else{
                    data[i]=(char)(t-1);
                }
            }
        }

        return String.valueOf(data);
    }

}

发表于 2023-08-08 19:25:13 回复(0)
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String str1 = in.nextLine();
        String str2 = in.nextLine();
        //使用字典法,简洁明了
        String a = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        String b = "BCDEFGHIJKLMNOPQRSTUVWXYZAbcdefghijklmnopqrstuvwxyza1234567890";
        StringBuilder out1 = new StringBuilder();
        StringBuilder out2 = new StringBuilder();
        for (int i = 0; i < str1.length(); i++) {
            out1.append(b.charAt(a.indexOf(str1.charAt(i))));
        }
        for (int i = 0; i < str2.length(); i++) {
            out2.append(a.charAt(b.indexOf(str2.charAt(i))));
        }
        System.out.println(out1);
        System.out.println(out2);
    }
}

发表于 2023-08-01 15:53:15 回复(0)
优点是没有使用特殊值  32 进行运算,也不做 a 或者 z 的判断
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String plaintext = in.next();
        String ciphertext = in.next();
        System.out.println(encrypt(plaintext.toCharArray()));
        System.out.println(decrypt(ciphertext.toCharArray()));
    }

    static char[] encrypt(char[] charArray) {
        for (int i = 0; i < charArray.length; i++) {
            if (charArray[i] >= 'a' && charArray[i] <= 'z') {
                charArray[i] -= 'a';
                charArray[i] = (char) ((charArray[i] + 1) % 26);
                charArray[i] += 'A';
            } else if (charArray[i] >= 'A' && charArray[i] <= 'Z') {
                charArray[i] -= 'A';
                charArray[i] = (char) ((charArray[i] + 1) % 26);
                charArray[i] += 'a';
            } else if (charArray[i] >= '0' && charArray[i] <= '9') {
                charArray[i] -= '0';
                charArray[i] = (char) ((charArray[i] + 1) % 10);
                charArray[i] += '0';
            }
        }
        return charArray;
    }

    static char[] decrypt(char[] charArray) {
        for (int i = 0; i < charArray.length; i++) {
            if (charArray[i] >= 'a' && charArray[i] <= 'z') {
                charArray[i] -= 'a';
                charArray[i] = (char) ((charArray[i] + 25) % 26);
                charArray[i] += 'A';
            } else if (charArray[i] >= 'A' && charArray[i] <= 'Z') {
                charArray[i] -= 'A';
                charArray[i] = (char) ((charArray[i] + 25) % 26);
                charArray[i] += 'a';
            } else if (charArray[i] >= '0' && charArray[i] <= '9') {
                charArray[i] -= '0';
                charArray[i] = (char) ((charArray[i] + 9) % 10);
                charArray[i] += '0';
            }
        }
        return charArray;
    }
}


发表于 2023-07-20 00:14:53 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        String str1 = in.nextLine();
        String str2 = in.nextLine();
        String result1 = "";
        String result2 = "";
        //加密
        for (int i = 0; i < str1.length(); i++) {
            char tmp = str1.charAt(i);
            //字符
            if (Character.isLetter(str1.charAt(i))) {
                if (tmp == 'z') {
                    tmp = 'a';
                } else if (tmp == 'Z') {
                    tmp = 'A';
                } else {
                    tmp = (char)(tmp + 1);
                }
                if (tmp >= 'A' && tmp <= 'Z') {
                    tmp = (tmp + "").toLowerCase().charAt(0);
                }else if (tmp >= 'a' && tmp <= 'z') {
                    tmp = (tmp + "").toUpperCase().charAt(0);
                }
            //数字
            }else if(Character.isDigit(tmp)){
                if(tmp!='9'){
                    tmp=(char)(tmp+1);
                }else{
                    tmp='0';
                }
            }
            result1 += tmp;
        }
        //解密
        for (int i = 0; i < str2.length(); i++) {
            char tmp = str2.charAt(i);
            //字符
            if (Character.isLetter(str2.charAt(i))) {
                if (tmp == 'a') {
                    tmp = 'z';
                } else if (tmp == 'A') {
                    tmp = 'Z';
                } else {
                    tmp = (char)(tmp -1);
                }
                if (tmp >= 'A' && tmp <= 'Z') {
                    tmp = (tmp + "").toLowerCase().charAt(0);
                }else if (tmp >= 'a' && tmp <= 'z') {
                    tmp = (tmp + "").toUpperCase().charAt(0);
                }
            //数字
            }else if(Character.isDigit(tmp)){
                if(tmp!='0'){
                    tmp=(char)(tmp-1);
                }else{
                    tmp='9';
                }
            }
            result2 += tmp;
        }
        System.out.println(result1);
        System.out.print(result2);
    }
}

发表于 2023-05-27 11:24:08 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        String a = in.nextLine();
        String b = in.nextLine();
        //加密后的字符
        StringBuffer encrypt = encrypt(a);
        System.out.println(encrypt);

        //解密后的字符
        StringBuffer decode = decode(b);
        System.out.println(decode);

    }

    public static StringBuffer encrypt(String a) {
        StringBuffer buf = new StringBuffer();
        for (int i = 0; i < a.length(); i++) {
            char c = a.charAt(i);
            String lt = String.valueOf(c);
            if (lt.matches(".*[a-z]")) {
                if (lt.equals("z")) {
                    buf.append("A");
                } else {
                    char alt = (char)(a.charAt(i) + 1);
                    buf.append(String.valueOf(alt).toUpperCase());
                }
            }
            if (lt.matches(".*[A-Z]")) {
                if (lt.equals("Z")) {
                    buf.append("a");
                } else {
                    char alt = (char)(a.charAt(i) + 1);
                    buf.append(String.valueOf(alt).toLowerCase());
                }
            }
            if (lt.matches(".*[0-9]")) {
                if (lt.equals("9")) {
                    buf.append("0");
                } else {
                    int i1 = Integer.valueOf(String.valueOf(c)) + 1;
                    buf.append(i1);
                }
            }
        }
        return buf;
    }

    public static StringBuffer decode(String a) {
        StringBuffer buf = new StringBuffer();
        for (int i = 0; i < a.length(); i++) {
            char c = a.charAt(i);
            String lt = String.valueOf(c);
            if (lt.matches(".*[a-z]")) {
                if (lt.equals("a")) {
                    buf.append("Z");
                } else {
                    char alt = (char)(a.charAt(i) - 1);
                    buf.append(String.valueOf(alt).toUpperCase());
                }
            }
            if (lt.matches(".*[A-Z]")) {
                if (lt.equals("A")) {
                    buf.append("z");
                } else {
                    char alt = (char)(a.charAt(i) - 1);
                    buf.append(String.valueOf(alt).toLowerCase());
                }
            }
            if (lt.matches(".*[0-9]")) {
                if (lt.equals("0")) {
                    buf.append("9");
                } else {
                    int i1 = Integer.valueOf(String.valueOf(c)) - 1;
                    buf.append(i1);
                }
            }
        }
        return buf;
    }
}

发表于 2023-05-26 10:17:10 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNext()) { // 注意 while 处理多个 case
            String a = in.nextLine();
            String b = in.nextLine();
            StringBuilder up = new StringBuilder();
            StringBuilder low = new StringBuilder();
            StringBuilder num = new StringBuilder();
            int lengthA = a.length();
            int lengthB = b.length();
            // 输出加密字符串
            for (int i = 0; i < lengthA; i++) {
                char c = a.charAt(i);
                if (Character.isUpperCase(c)) {
                    // up.append(Character.toLowerCase(c));
                    c = (char) (c + 1);
                    c = c > 'Z' ? 'A' : c;
                    c = Character.toLowerCase(c);
                    System.out.printf("" + c);
                } else if (Character.isLowerCase(c)) {
                    // low.append(Character.toUpperCase(c));
                    c = (char) (c + 1);
                    c = c > 'z' ? 'a' : c;
                    c = Character.toUpperCase(c);
                    System.out.printf("" + c);
                } else {
                    // num.append(c == '9' ? '0' : (c + 1));
                    c = (char) (c + 1);
                    if (c > '9') {
                        c = '0';
                    }
                    System.out.printf("" + c);
                }
            }
            System.out.printf("\n");
            // 输出解密字符串
            for (int i = 0; i < lengthB; i++) {
                char c = b.charAt(i);
                if (Character.isUpperCase(c)) {
                    // up.append(Character.toLowerCase(c));
                    c = (char) (c - 1);
                    c = c < 'A' ? 'Z' : c;
                    c = Character.toLowerCase(c);
                    System.out.printf("" + c);
                } else if (Character.isLowerCase(c)) {
                    // low.append(Character.toUpperCase(c));
                    c = (char) (c - 1);
                    c = c < 'a' ? 'z' : c;
                    c = Character.toUpperCase(c);
                    System.out.printf("" + c);
                } else {
                    // num.append(c == '9' ? '0' : (c + 1));
                    c = (char) (c - 1);
                    if (c < '0') {
                        c = '9';
                    }
                    System.out.printf("" + c);
                }
            }
            System.out.printf("\n");
        }
    }
}

发表于 2023-05-23 12:59:41 回复(0)

算了,还是这样吧!
简单明了,不需要多思考

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            System.out.println(encodeString(scanner.next()));
            System.out.println(decodeString(scanner.next()));

        }
    }

    public static String encodeString(String string) {
        char[] chars = string.toCharArray();
        StringBuilder builder = new StringBuilder();
        for (char aChar : chars) {
            char next = (char) (aChar + 1);
            if (Character.isLowerCase(aChar)) {
                if (aChar == 'z') {
                    builder.append('A');
                    continue;
                }
                builder.append(Character.toUpperCase(next));
            }
            if (Character.isUpperCase(aChar)) {
                if (aChar == 'Z') {
                    builder.append('a');
                    continue;
                }
                builder.append(Character.toLowerCase(next));
            }
            if (Character.isDigit(aChar)) {
                if (aChar == '9') {
                    builder.append('0');
                    continue;
                }
                builder.append(next);
            }
        }
        return builder.toString();
    }

    public static String decodeString(String string) {
        char[] chars = string.toCharArray();
        StringBuilder builder = new StringBuilder();
        for (char aChar : chars) {
            char next = (char) (aChar - 1);
            if (Character.isLowerCase(aChar)) {
                if (aChar == 'a') {
                    builder.append('Z');
                    continue;
                }
                builder.append(Character.toUpperCase(next));
            }
            if (Character.isUpperCase(aChar)) {
                if (aChar == 'A') {
                    builder.append('z');
                    continue;
                }
                builder.append(Character.toLowerCase(next));
            }
            if (Character.isDigit(aChar)) {
                if (aChar == '0') {
                    builder.append('9');
                    continue;
                }
                builder.append(next);
            }
        }
        return builder.toString();
    }
}
发表于 2023-05-23 08:03:37 回复(0)
半夜打完游戏睡不着就来做一做
看了很多结论都是分开写加解密方法,想了一想不用分别写加解密算法了,直接用相关标识通过数学公式即可用一个方法同时解决加解密
核心公式
英文字母:strChar[i] = (char) (strChar[i] + charShift * ('A' - 'a') + shift * 1)//charShift:大小写标识;shift:加解密标识;
数字:模运算:(原数 + 偏移 + 模)%  模;
代码如下(Java)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String enCode = in.nextLine();
        String deCode = in.nextLine();
        System.out.println(code(true, enCode));
        System.out.println(code(false, deCode));
    }
    public static String code (boolean isCode, String str) {
        char[] strChar = str.toCharArray();
        int shift = -1;
        if (isCode) {
            shift = 1;
        }
        for (int i = 0; i < strChar.length; i ++) {
            if (Character.isLetter(strChar[i])) {
                int charShift = 1;
                if (Character.isUpperCase(strChar[i])) {
                    charShift = -1;
                }
                if ((strChar[i] == 'Z' || strChar[i] == 'z') && shift == 1) {
                    strChar[i] = charShift == -1 ? 'a' : 'A';
                } else if ((strChar[i] == 'A' || strChar[i] == 'a') && shift == -1) {
                    strChar[i] = charShift == -1 ? 'z' : 'Z';
                } else {
                    strChar[i] = (char) (strChar[i] + charShift * ('A' - 'a') + shift * 1);
                }
            } else {
                strChar[i] = (char) ((strChar[i] + shift + 10 - '0') % 10 + '0');
            }
        }
        return new String(strChar);
    }
}


发表于 2023-05-15 03:20:49 回复(0)
 public static void main(String[] args) throws IOException {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        String astr ;
        while ((astr=in.readLine())!=null) {
          char [] a=  astr.toCharArray();
          StringBuilder sb = new StringBuilder();
            for (int i = 0; i < a.length; i++) {
                if (Character.isLetter(a[i])) {
                    if ('z' == a[i]) {
                        a[i] = 'A';
                    }else if ('Z' == a[i]) {
                            a[i] = 'a';
                    }
                    else {
                        a[i] = (char) (Character.isLowerCase(a[i])?Character.toUpperCase(a[i]+1):Character.toLowerCase(a[i]+1));
                    }
                }else {
                    if ('9' == a[i]) {
                        a[i] = '0';
                    }else {
                        a[i] = (char) (a[i]+1);
                    }

                }
                sb.append(a[i]);
            }
            sb.append("\n");
            char [] b=  in.readLine().toCharArray();
            for (int i = 0; i < b.length; i++) {
                if (Character.isLetter(b[i])) {
                    if ('a' == b[i]) {
                        b[i] = 'Z';
                    }else if ('A' == b[i]) {
                        b[i] = 'z';
                    }
                    else{

                    b[i] = (char) (Character.isLowerCase(b[i])?Character.toUpperCase(b[i])-1:Character.toLowerCase(b[i])-1);
                    }
                }else {
                    if ('0' == b[i]) {
                        b[i] = '9';
                    }else {
                        b[i] = (char) (b[i]-1);
                    }
                }
                sb.append(b[i]);
            }
            System.out.println(sb);
        }
        in.close();
    }

发表于 2023-05-12 02:10:30 回复(0)
Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNext()) { // 注意 while 处理多个 case
            String str = in.next();
            String str1 = in.next();
            char[] chars = str.toCharArray();
            int num = chars.length;
            char[] chars1 = str1.toCharArray();
            int num1 = chars1.length;
            //大写字母范围:65(‘A’)~90(‘Z’)。小写字母范围:97(‘a’)~122(‘z’)
            //数字范围:48(‘0’)~57(‘9’)
            //注意字符经过转换成数字需要(char)强制转换成字符
            for (int i = 0; i < num; i++) {
                if (chars[i] >= 65 && chars[i] <= 90 || chars[i] >= 97 && chars[i] <= 122) {
                    if (chars[i] == 90) { //大写Z
                        chars[i] = 'a';
                    } else if (chars[i] == 122) { //小写z
                        chars[i] = 'A';
                    } else if (chars[i] >= 65 && chars[i] < 90) { //大写字母
                        chars[i] = String.valueOf((char)(chars[i] + 1)).toLowerCase().toCharArray()[0];
                    } else if (chars[i] >= 97 && chars[i] < 122) { //小写字母
                        chars[i] = String.valueOf((char)(chars[i] + 1)).toUpperCase().toCharArray()[0];
                    }
                } else if (chars[i] >= 48 && chars[i] <= 57) {
                    if (chars[i] == 57) { //9
                        chars[i] = '0';
                    } else if (chars[i] >= 48 && chars[i] < 90) { //0-8
                        chars[i] = String.valueOf((char)(chars[i] + 1)).toLowerCase().toCharArray()[0];
                    }
                }
            }

            for (int i = 0; i < num1; i++) {
                if (chars1[i] >= 65 && chars1[i] <= 90 || chars1[i] >= 97 && chars1[i] <= 122) {
                    if (chars1[i] == 97) { //小写a
                        chars1[i] = 'Z';
                    } else if (chars1[i] == 65) { //大写a
                        chars1[i] = 'z';
                    } else if (chars1[i] > 65 && chars1[i] <= 90) { //大写字母
                        chars1[i] = String.valueOf((char)(chars1[i] - 1)).toLowerCase().toCharArray()[0];
                    } else if (chars1[i] > 97 && chars1[i] <= 122) { //小写字母
                        chars1[i] = String.valueOf((char)(chars1[i] - 1)).toUpperCase().toCharArray()[0];
                    }
                } else if (chars1[i] >= 48 && chars1[i] <= 57) {
                    if (chars1[i] == 48) { //0
                        chars1[i] = '9';
                    } else if (chars1[i] > 48 && chars1[i] <= 90) { //0-8
                        chars1[i] = String.valueOf((char)(chars1[i] - 1)).toLowerCase().toCharArray()[0];
                    }
                }
            }
            StringBuffer bf = new StringBuffer("");
            StringBuffer bf1 = new StringBuffer("");
            for (int i = 0; i < num; i++) {
                bf.append(chars[i]);
            }
            for (int i = 0; i < num1; i++) {
                bf1.append(chars1[i]);
            }
            System.out.println(bf.toString());
            System.out.println(bf1.toString());
        }
发表于 2023-04-11 23:42:31 回复(0)