javaasciivigenere

Removing ascii using for simple alphabet


I need this method to be reworked without using ASCII table(it is encoder for vigenere cipher)

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();
}

Solution

  • Like @Kayaman said, we can write our alphabet out by hand and use that for reference. This way, if our alphabet changes (say, to a different language), we don't have to change our code. The new code looks like this:

    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();
    }