1

我正在尝试使用 HashMap 制作一个“翻译器”,它将文本转换为二进制,我无法弄清楚如何用所述字符的值替换所有字符。例子。键:“a” 值:“0110 0001”。这就是我现在所拥有的。PS我还是一个初学者,所以请纠正我哪里错了。谢谢!

import java.util.Scanner;
import java.util.Map;
import java.util.HashMap;

public class Main{
    
    public static void main(String[] args){

        Scanner scan = new Scanner(System.in);
        HashMap<String, String> translator = new HashMap<String, String>();

        translator.put("0", "0011 0000");
        translator.put("1", "0011 0001");
        translator.put("2", "0011 0010");
        translator.put("3", "0011 0011");
        translator.put("4", "0011 0100");
        translator.put("5", "0011 0101");
        translator.put("6", "0011 0110");
        translator.put("7", "0011 0111");
        translator.put("8", "0011 1000");
        translator.put("9", "0011 1001");
        translator.put("A", "0100 0001");
        translator.put("B", "0100 0010");
        translator.put("C", "0100 0011");
        translator.put("D", "0100 0100");
        translator.put("E", "0100 0101");
        translator.put("F", "0100 0110");
        translator.put("G", "0100 0111");
        translator.put("H", "0100 1000");
        translator.put("I", "0100 1001");
        translator.put("J", "0100 1010");
        translator.put("K", "0100 1011");
        translator.put("L", "0100 1100");
        translator.put("M", "0100 1101");
        translator.put("N", "0100 1110");
        translator.put("O", "0100 1111");
        translator.put("P", "0101 0000");
        translator.put("Q", "0101 0001");
        translator.put("R", "0101 0010");
        translator.put("S", "0101 0011");
        translator.put("T", "0101 0100");
        translator.put("U", "0101 0101");
        translator.put("V", "0101 0110");
        translator.put("W", "0101 0111");
        translator.put("X", "0101 1000");
        translator.put("Y", "0101 1001");
        translator.put("Z", "0101 1010");
        translator.put("a", "0110 0001");
        translator.put("b", "0110 0010");
        translator.put("c", "0110 0011");
        translator.put("d", "0110 0100");
        translator.put("e", "0110 0101");
        translator.put("f", "0110 0110");
        translator.put("g", "0110 0111");
        translator.put("h", "0110 1000");
        translator.put("i", "0110 1001");
        translator.put("j", "0110 1010");
        translator.put("k", "0110 1011");
        translator.put("l", "0110 1100");
        translator.put("m", "0110 1101");
        translator.put("n", "0110 1110");
        translator.put("o", "0110 1111");
        translator.put("p", "0111 0000");
        translator.put("q", "0111 0001");
        translator.put("r", "0111 0010");
        translator.put("s", "0111 0011");
        translator.put("t", "0111 0100");
        translator.put("u", "0111 0101");
        translator.put("v", "0111 0110");
        translator.put("w", "0111 0111");
        translator.put("x", "0111 1000");
        translator.put("y", "0111 1001");
        translator.put("z", "0111 1010");
 
        System.out.println("Enter a phrase : ");
        String txt = scan.nextLine();
        String diffTxt = null;

        for(int i = 0; i < txt.length(); i++){

            Character tmp = txt.charAt(i);
            String tmpName = tmp.toString();

            for(Map.Entry<String, String> entry : translator.entrySet()){
                
                if(tmpName.equals(entry.getKey())){ 
                    diffTxt = txt.replace(tmp.toString(), entry.getValue());
                }
            }
            System.out.println(diffTxt);
        }
        
    }
}
4

2 回答 2

0

只需遍历输入字符串的字符数组表示,并使用每个字符的字符串表示作为键,从translator映射中获取相应的值。

System.out.println("Enter a phrase : ");
char[] txt = scan.nextLine().toCharArray(); //it's more comfortable and faster to work with char array

for(char c : txt) {
    System.out.print(translator.get(String.valueOf(txt[i]))+" "); //you need a string representation of char value, as your map's key is String
}

所以,输入:

Grejuc Andrei

将打印:

0100 0111 0111 0010 0110 0101 0110 1010 0111 0101 0110 0011 null 0100 0001 0110 1110 0110 0100 0111 0010 0110 0101 0110 1001

注意!印刷文本包括null,我将其留给您识别 - 为什么。

于 2021-03-10T18:49:38.557 回答
-2

我会将字符串转换为数组并使用array.stream().map()。在那里您可以使用您手动定义的地图。最后使用 array.join 再次获取字符串。

只是一个想法,也许有更好的..

于 2021-03-10T18:27:35.867 回答