java - 将字符串与 Map<Character, String> 中的值进行比较并返回其键

标签 java hashmap iteration

大家好!

我有一个映射,其中键作为字符,其值作为字符串,如下所示(培根密码):

public class MyClass {

private static final Map<Character, String> cipheredAlphabet;
    static {
        cipheredAlphabet = new HashMap<Character, String>();
        cipheredAlphabet.put('a', "AAAAA");
        cipheredAlphabet.put('s', "BAABA");
    }
}

我有一个如下所示的字符串:

String encodedMessage = "BAABAAAAAA";

我想一次迭代 5 个字母:

StringBuilder decodedMessage = new StringBuilder();
for(int i=0; i<encodedMessage.length(); i+=5) {
    String fiveLetters = encodedMessage.substring(i, i+5);
    // compare five letters to values and append the corresponding key

}

如何将这五个字母与 map 中的值进行比较,并将相应的键附加到我的 StringBuilder 中?

预期输出:

sa

使用文档中的信息,我想出了这样的东西:

StringBuilder decodedMessage = new StringBuilder();
    for(int i=0; i<encodedMessage.length(); i+=5) {
        String fiveLetters = encodedMessage.substring(i, i+5);
        // pseudo code starts from this point
        for(Map.Entry<Character, String> entry: cipheredAlphabet.entrySet()) {
            if(cipheredAlphabet.getValue().equals(fiveLetters))
            decodedMessage.append(cipheredAlphabet.getKey());

最佳答案

for(Map.Entry<Character, String> entry: cipheredAlphabet.entrySet()) {
    if(entry.getValue().equals(fiveLetters)) {
        ecodedMessage.append(cipheredAlphabet.getKey());
        break;
    }
}

但我认为交换映射中的键和值要好得多。

public class MyClass {

    private static final Map<String, Character> MAP = new HashMap<>();

    static {
        MAP.put("AAAAA", 'a');
        MAP.put("BAABA", 's');
    }

    public String decode(String msg) {
        if (msg == null || msg.length() % 5 != 0)
            throw new IllegalArgumentException("Message length should be a multiple of 5");

        StringBuilder buf = new StringBuilder();

        for (int i = 0; i < msg.length(); i += 5) {
            String letters = msg.substring(i, i + 5);
            Character ch = MAP.get(letters);

            if (ch == null)
                throw new IllegalArgumentException("Letters '" + letters + "' not found in local map");

            buf.append(ch);
        }

        return buf.toString();
    }
}

关于java - 将字符串与 Map<Character, String> 中的值进行比较并返回其键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53343420/

相关文章:

java - 在 HashMap 中存储字符和二进制数

Java高效迭代char

python 制作我自己的小写转换器

java - HashMap 上的多个键 : it deletes existing values?

java - 包含 inputText : is it possible with JSF Custom Component 的 DataTable

java - 如何使用对象映射器将 List<Entity> 转换为 List<DTO> 对象?

java - 出现异常 "submit-job-thread-pool-0"Spark 作业 kafka

java - 如何从 HashMap 中仅打印前 10 个单词及其出现频率?

ios - 向后迭代for循环?

java - org.apache.spark.sql.AnalysisException : No such struct field