【问题标题】:Removing ascii using for simple alphabet使用简单字母表删除 ascii
【发布时间】:2019-10-22 12:57:29
【问题描述】:

我需要在不使用ASCII table 的情况下重新设计此方法(它是 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();
}

【问题讨论】:

  • 你想要什么?你写了那个代码?它有效吗?如果没有,那怎么行不通?
  • 我做到了,而且有效。但是我的老师想要它而不使用 ascii,而是使用英文字母的简单字符串(或数组),我不知道该怎么做。
  • 啊,你的意思是没有symbol - 65 诡计。您可以按顺序创建一个包含所有字母的字符串,并在其上使用indexOfcharAt 来做同样的事情。

标签: java ascii vigenere


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2015-03-30
    • 1970-01-01
    • 2017-04-28
    • 1970-01-01
    • 1970-01-01
    • 2012-01-24
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多