You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java字符串移位加密出现异常字符问题该如何修复

加密代码问题修复方案

问题根因

原有代码的移位逻辑存在3个核心错误:

  • 边界判断遗漏:原判断(ch[i]+x) < 122没有覆盖加完偏移后刚好等于z(ASCII 122)的场景,导致t加7得到123直接溢出小写字母范围输出{
  • 溢出后计算逻辑错误:处理超出z的字符时,先将字符赋值为a再计算偏移量,使用修改后的字符值计算导致结果完全偏离预期
  • 未做大小写兼容:未区分大小写字母的ASCII范围,输入大写字母或者移位后不小心落到大写字母范围时就会输出错误字符,你遇到的输入u得到N的问题就是该逻辑错误导致的

修复方案

替换原有复杂的分支判断逻辑,使用模26的标准凯撒移位实现:

  1. 先判断字符是否是小写字母,是则按小写规则移位
  2. 若为大写字母按大写规则移位
  3. 非字母的空格已经提前替换为*,无需额外处理

修复后完整代码

import java.util.Scanner;

public class pppp {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        String s1 = input.nextLine();
        int x = input.nextInt();
        char[] ch = new char[s1.length()];
        // 反转明文
        for (int i = s1.length() - 1, j = 0; i >= 0; i--, j++) {
            ch[j] = s1.charAt(i);
        }
        System.out.println(ch);
        // 空格替换+移位
        for (int i = 0; i < ch.length; i++) {
            if (ch[i] == ' ') {
                ch[i] = '*';
            } else if (Character.isLowerCase(ch[i])) {
                // 小写字母移位逻辑
                int offset = (ch[i] - 'a' + x) % 26;
                ch[i] = (char) ('a' + offset);
            } else if (Character.isUpperCase(ch[i])) {
                // 大写字母移位逻辑
                int offset = (ch[i] - 'A' + x) % 26;
                ch[i] = (char) ('A' + offset);
            }
        }
        System.out.println(ch);
        input.close();
    }
}

验证结果

输入明文megadeth、密钥7时:

  • 反转后结果为htedagem
  • 移位后结果为oalkhnlt,原来的{问题修复
  • 输入小写字符u、密钥7时,计算逻辑为(20 +7) %26 =1,对应输出小写b,不会输出错误的N

内容的提问来源于stack exchange,提问作者Muhtasimul Hasan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 06:48:03