java - 使用简单字母表删除 ascii
问题描述
我需要在不使用表格的情况下重新设计这种方法ASCII
(它是 vigenere 密码的编码器)
private static final int ALPHABET = 26;
public static final String KEY = "AB";
public String encode(String input) {
StringBuilder letters = new StringBuilder();
input = input.toUpperCase();
for (int i = 0, j = 0; i < input.length(); i++) {
char symbol = input.charAt(i);
letters.append((char) (((symbol - 65) + (KEY.charAt(j) - 65)) % ALPHABET + 65));
j = ++j % KEY.length();
}
return letters.toString().toLowerCase();
}
解决方案
就像@Kayaman 所说,我们可以手写我们的字母表并用作参考。这样,如果我们的字母表发生变化(例如,更改为不同的语言),我们就不必更改代码。新代码如下所示:
private static final String ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
public static final String KEY = "AB";
public String encode(String input) {
StringBuilder letters = new StringBuilder();
input = input.toUpperCase();
for (int i = 0, j = 0; i < input.length(); i++) {
char symbol = input.charAt(i);
char keySymbol = KEY.charAt(j);
int newIndex =
(ALPHABET.indexOf(symbol) + ALPHABET.indexOf(keySymbol))
% ALPHABET.length();
char newSymbol = ALPHABET.charAt(newIndex);
letters.append(newSymbol);
j = ++j % KEY.length();
}
return letters.toString().toLowerCase();
}
推荐阅读
- android - 尝试以编程方式安装 APK 时出错
- apache-spark - 如何访问数组类型值并在两个不同的列中设置火花?
- python - 即使我知道它已安装,也没有名为 X 的模块
- python - 从 Django Redis 缓存中检索数据需要大量时间
- javascript - 替换字符串开头和结尾的某些字符
- r - 了解 R 包安装中的错误
- sql - 在日期函数之间组合字符串后获取 NULL
- go - 使用 GoPacket 解析 GMS 数据包
- palantir-foundry - 是否可以在代码工作簿中的单个节点内渲染多个绘图?
- python - 安装和运行 Selenium、Pycharm 时出错