首页 > 其他分享 >HJ29 字符串加解密

HJ29 字符串加解密

时间:2023-07-14 22:55:53浏览次数:34  
标签:String Character 加解密 else char HJ29 字符串 sb append

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的功能,但是在使用时要注意以下几点:

标签:String,Character,加解密,else,char,HJ29,字符串,sb,append
From: https://www.cnblogs.com/shoshana-kong/p/17548655.html

相关文章

  • Java字符串按字符排序的方法
     Java字符串按字符排序的方法字符串排序是一种常见的编程需求,它可以让我们按照一定的规则对字符串进行比较和排列。在Java中,有多种方法可以实现字符串按字符排序,本文将介绍四种常用的方法,并给出相应的示例代码。1.使用String类的compareTo()方法String类提供了一个compareTo......
  • HJ26 字符串排序
    1.题目读题HJ26 字符串排序   考查点 2.解法思路 代码逻辑 具体实现 publicclassHJ026{publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);System.out.println(sort(sc.nextLine()));}publ......
  • C++将WSAGetLastError转换成字符串信息
    #include<iostream>#include<Windows.h>#include<WinSock2.h>std::stringGetLastErrorMessage(){DWORDerrorCode=WSAGetLastError();LPSTRerrorMessage=nullptr;DWORDresult=FormatMessageA(FORMAT_MESSAGE_ALL......
  • 根据模板自动匹配目标字符串
    好的,让我们模拟一下这段代码的运行,并打印出每一行的结果://声明一个静态的正则表达式模式,用于匹配大括号中的内容privatestaticfinalPatternpattern=Pattern.compile("\\{(.*?)\\}");privatestaticMatchermatcher;//字符串格式化替换方法publicStringformatStr......
  • java 判断字符串内容是utf-8还是utf8mb4
    判断字符串内容是UTF-8还是UTF8MB4的方法概述在Java中,判断字符串内容是UTF-8还是UTF8MB4可以通过检查字符编码范围来实现。UTF-8使用1到4个字节表示一个字符,而UTF8MB4使用1到4个字节表示一个字符。下面将介绍整个流程和每一步需要做的事情。流程步骤描述1.将字符串转......
  • java 判断以逗号分割的字符串
    Java判断以逗号分割的字符串简介在Java中,判断以逗号分割的字符串可以使用split方法将字符串分割成多个子字符串,然后逐个判断每个子字符串是否满足特定条件。本文将介绍如何使用Java实现这一功能。流程图步骤描述步骤1通过split方法将字符串分割成多个子字符串步......
  • mysql的字符串函数
    对于针对字符串位置的操作,第一个位置被标记为1。ASCII(str)返回字符串str的最左面字符的ASCII代码值。如果str是空字符串,返回0。如果str是NULL,返回NULL。mysql>selectASCII('2');    ->50mysql>selectASCII(2);    ->50mysql>selectASCII('dx'); ......
  • 2023-07-13:如果你熟悉 Shell 编程,那么一定了解过花括号展开,它可以用来生成任意字符串
    2023-07-13:如果你熟悉Shell编程,那么一定了解过花括号展开,它可以用来生成任意字符串。花括号展开的表达式可以看作一个由花括号、逗号和小写英文字母组成的字符串定义下面几条语法规则:如果只给出单一的元素x,那么表达式表示的字符串就只有"x"。R(x)={x}例如,表达式"a"......
  • Sunday字符串匹配
    引入Sunday算法是一种极其容易理解的算法,复杂度较为玄学。事实上,这个算法没啥用实现Sunday算法的实现只比暴力匹配多了一个步骤,它在匹配失败时关注的是主串中参与匹配的最末尾字符的下一位字符,分为两种情况:该字符没有在模式串中出现过,移动位数=模式串长度+1该字符在模式串......
  • 2.2、字符串截取函数
    substring() mysql>selectsubstring('abc',1,1);+----------------------+|substring('abc',1,1)|+----------------------+|a|+----------------------+1rowinset(0.00sec)   mid() mysql>selectmid((selectdatabas......