删除简单字母使用的ASCII

问题描述 投票:0回答:1

我需要在不使用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();
}
java ascii vigenere
1个回答
0
投票

就像@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();
}
© www.soinside.com 2019 - 2024. All rights reserved.