当前位置: 首页 > news >正文

字符串-04-字符串加解密

文章目录

  • 1. 题目描述
  • 2. 思路
  • 3. 代码

1. 题目描述

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

  • 加密方法为:
    • 当内容是英文字母时则用该英文字母的后一个字母替换,同时字母变换大小写,如字母a时则替换为B;字母Z时则替换为a;
    • 当内容是数字时则把该数字加1,如0替换1,1替换2,9替换0;
    • 其他字符不做变化。
  • 解密方法为:加密的逆过程。
  • 数据范围:输入的两个字符串长度满足 1 ≤ n ≤ 1000 1≤n≤1000 1n1000 ,保证输入的字符串都是只由大小写字母或者数字组成。

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

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

示例1:

  • 输入:
    abcdefg
    BCDEFGH
  • 输出:
    BCDEFGH
    abcdefg

2. 思路

Character包装类提供了一套方法可以判断数字、字母(大小写),直接使用即可。只需要注意:

  1. 注意边界值azAZ特殊处理。
  2. 使用for-each得到的是char数组中元素的副本,不会对其进行修改。如需修改使用fori。
  3. 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();}
}

以上为个人学习分享,如有问题,欢迎指出:)


http://www.mrgr.cn/news/57569.html

相关文章:

  • List、Set、数据结构、Collections
  • Jenkins配置CI/CD开发环境(理论到实践的完整流程)
  • 【隐私计算】隐语HEU同态加密算法解读
  • 手机玩使命召唤21:黑色行动6?GameViewer远程玩使命召唤教程
  • Unity-Shader-Tags
  • 鸿蒙系统 VS 安卓系统,谁将引领未来移动操作系统?
  • 最新整理:自动化测试常见面试题
  • fmql之Linux中I2C总线框架
  • 开源模型应用落地-Qwen2-VL-7B-Instruct-vLLM-OpenAI API Client调用
  • 基于RabbitMQ,Redis,Redisson,RocketMQ四种技术实现订单延时关闭功能及其相关优缺点介绍(以12306为主题)
  • Stability.AI 发布 SD3.5 模型,能否逆袭击败 FLUX?如何在ComfyUI中的使用SD3.5?
  • 使用gpt2-medium基座说明模型微调
  • anolis os 8.8 修改kube-proxy的模式为ipvs-kubeadm部署
  • arcgis pro 3.3.1安装教程
  • 重学SpringBoot3-Spring WebFlux之HttpHandler和HttpServer
  • 代码随想录算法训练营第二十五天 | 491.递增子序列 46.全排列 47.全排列Ⅱ
  • LeetCode练习-删除链表的第n个结节
  • Hot100速刷计划day04(10-12)
  • 【网页布局技术】项目六 制作表格并使用CSS美化
  • 【Linux】进程信号(下)
  • CCRC-CDO首席数据官的主要工作内容
  • 全新原生鸿蒙HarmonyOS NEXT发布,书写国产操作系统新篇章!同时,触觉智能发布OpenHarmony5.0固件
  • (一)ArkTS语言——申明与类型
  • day7:软件包管理
  • 力扣247题详解:中心对称数 II 的多种解法与模拟面试
  • 自动粘贴神器,数据复制粘贴快速处理记事本