簡體   English   中英

用不同的字符替換字符串的所有字符

[英]Replacing all characters of a String with different ones

我正在嘗試使用 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);
        }
        
    }
}

只需遍歷輸入字符串的字符數組表示,並使用每個字符的字符串表示作為鍵,從translator map 獲取相應的值。

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 ,我將其留給您識別 - 為什么。

我會將字符串轉換為數組並使用array.stream().map()。 您可以在那里使用您手動定義的 map。 最后使用 array.join 再次獲取字符串。

只是一個想法,也許有更好的..

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM