string.charat()可安全获取字符并转ascii值实现凯撒加密:仅对大小写字母按(key + c - 'a'/'a') % 26 + 'a'/'a'循环位移,非字母字符原样保留。
在 java 中,string.charat() 是获取字符串中指定索引处字符的最直接方式,结合 ascii 码值的加减运算,可以快速实现轻量级的字符位移加密(如凯撒密码变种)。关键在于理解索引边界、字符与整数的隐式转换,以及避免非字母字符误处理。
用 charAt() 安全获取字符并转为 ASCII 值
charAt(int index) 返回 char 类型,而 char 在参与算术运算时会自动提升为 int,其值即为对应 ASCII 码(对英文字符而言):
- 索引从 0 开始,最大有效索引是
str.length() - 1;越界会抛StringIndexOutOfBoundsException - 直接将
char赋给int变量即可得到 ASCII 值:例如char c = 'A'; int ascii = c;→ascii == 65 - 注意:中文、emoji 等 Unicode 字符超出 ASCII 范围(0–127),但依然可参与数值计算,只是“位移”逻辑需按实际编码意图设计
简易加密:对字母做模运算实现循环位移
仅对大小写字母加密,数字、空格、标点保持不变,位移量设为 key = 3(类似经典凯撒密码):
- 大写字母范围:'A'(65) 到 'Z'(90),位移后用
(c - 'A' + key) % 26 + 'A'保证仍在 A–Z 内 - 小写字母范围:'a'(97) 到 'z'(122),同理用
(c - 'a' + key) % 26 + 'a' - 非字母字符原样保留,不参与 ASCII 加减
示例加密方法:
public static String encrypt(String s, int key) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i = 'A' && c = 'a' && c 解密只需反向位移(或等效正向位移)
解密不是简单减 key,而是确保结果仍在合法字母范围内。两种等效写法:
- 用负位移加模修正:
(c - 'A' - key + 26) % 26 + 'A'(+26 避免负数取模异常) - 或复用加密逻辑,用
26 - key % 26作为新 key(如 key=3,则解密 key=23)
推荐统一逻辑,复用加密结构更安全:
public static String decrypt(String s, int key) {
return encrypt(s, 26 - (key % 26)); // key=3 → 23,位移回原位置
}注意事项与常见陷阱
-
不要对整个 ASCII 值直接加 key:如
'Z' + 3得 93(']'),不是 'C',必须先归零再模再还原 - key 应取模 26:key=29 等价于 key=3,避免无效大数运算
-
charAt() 不支持负索引或链式调用:不能写
str.charAt(i).toUpperCase()(char 没该方法),需先转为 String 或用Character.toUpperCase(c) - 若需支持 Unicode 全字符集(如中文),应改用
codePointAt()和offsetByCodePoints(),而非 charAt()
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











