lotus

贵有恒何必三更眠五更起 最无益只怕一日曝十日寒

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

1. 题目

读题

HJ29 字符串加解密 

 

考查点

 

2. 解法

思路

 

代码逻辑

 

具体实现

 

这道题目的解答思路是:

  • 首先,定义两个字符串,分别存储加密和解密的规则,例如"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789""BCDEFGHIJKLMNOPQRSTUVWXYZAbcdefghijklmnopqrstuvwxyza1234567890"
  • 然后,对输入的字符串进行遍历,对每个字符进行查表操作,找到对应的加密或解密后的字符,并拼接到结果字符串中。
  • 最后,输出结果字符串。

用JAVA解答的话,可以参考以下代码1

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            String s1 = sc.nextLine();
            String s2 = sc.nextLine();
            System.out.println(encrypt(s1));
            System.out.println(decrypt(s2));
        }
        sc.close();
    }

    // 加密
    public static String encrypt(String s) {
        String dic1 = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        String dic2 = "BCDEFGHIJKLMNOPQRSTUVWXYZAbcdefghijklmnopqrstuvwxyza1234567890";
        StringBuilder sb = new StringBuilder();
        for (char c : s.toCharArray()) {
            int index = dic1.indexOf(c);
            if (index == -1) {
                sb.append(c);
            } else {
                sb.append(dic2.charAt(index));
            }
        }
        return sb.toString();
    }

    // 解密
    public static String decrypt(String s) {
        String dic1 = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        String dic2 = "BCDEFGHIJKLMNOPQRSTUVWXYZAbcdefghijklmnopqrstuvwxyza1234567890";
        StringBuilder sb = new StringBuilder();
        for (char c : s.toCharArray()) {
            int index = dic2.indexOf(c);
            if (index == -1) {
                sb.append(c);
            } else {
                sb.append(dic1.charAt(index));
            }
        }
        return sb.toString();
    }
}

 

 

自有实现

public class HJ029 {

public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println(encode(sc.nextLine()));
System.out.println(decode(sc.nextLine()));
}

public static String encode(String str) {

StringBuffer sb = new StringBuffer();
for (char c : str.toCharArray()) {

if (Character.isDigit(c)) {
if (c == '9') {
sb.append('0');
} else {
sb.append((char) (c + 1));
}
} else if (c >= 'a' && c <= 'z') {
if (c == 'z') {
sb.append('A');
} else {
sb.append(Character.toUpperCase((char) (c + 1)));
}
} else if (c >= 'A' && c <= 'Z') {
if (c == 'Z') {
sb.append('a');
} else {
sb.append(Character.toLowerCase((char) (c + 1)));
}
} else {
sb.append(c);
}
}

return sb.toString();
}

public static String decode(String str) {
StringBuffer sb = new StringBuffer();
for (char c : str.toCharArray()) {

if (Character.isDigit(c)) {
if (c == '0') {
sb.append('9');
} else {
sb.append((char) (c - 1));
}
} else if (c >= 'a' && c <= 'z') {
if (c == 'a') {
sb.append('Z');
} else {
sb.append(Character.toUpperCase((char) (c - 1)));
}
} else if (c >= 'A' && c <= 'Z') {
if (c == 'A') {
sb.append('z');
} else {
sb.append(Character.toLowerCase((char) (c - 1)));
}
} else {
sb.append(c);
}
}

return sb.toString();
}
}

3. 总结

 

Java中char类型加1的方法

Java中char类型是一个16位的Unicode字符,它可以表示0到65535之间的整数值。因此,对char类型的变量或常量进行加1操作,就相当于对它们的整数值进行加1操作,然后转换回char类型。

例如,如果有一个char变量c = 'a',那么c + 1的结果就是'b',因为’a’的整数值是97,加1后是98,对应的字符是’b’。同理,如果有一个char常量'9',那么'9' + 1的结果就是':',因为’9’的整数值是57,加1后是58,对应的字符是’:'。

Java中char类型加1的方法有以下几种:

  • 直接使用加号运算符(+),例如c + 1或者'9' + 1
  • 使用Character类的静态方法toChars(int codePoint),它可以根据一个Unicode码点返回一个char数组,例如Character.toChars(c + 1)或者Character.toChars('9' + 1)
  • 使用强制类型转换(cast),将整数值转换为char类型,例如(char)(c + 1)或者(char)('9' + 1)

以上三种方法都可以实现char类型加1的功能,但是在使用时要注意以下几点:

posted on 2023-07-14 22:43  白露~  阅读(155)  评论(0编辑  收藏  举报