首页 > 解决方案 > 如何将数字加密为正确的字符串

问题描述

我正在尝试通过输入与某个字母相对应的数字来制作解密方法。

使用当前代码,当我输入 25 时,我只会输出“ab”。有人可以指出我正确的方向吗?

我已经尝试在我的 中使用char ch = Character.toLowerCase(str.charAt(i)); 和拥有,但是当我达到 10+ 时,这给了我一个问题。chswitch

谢谢你。注意安全。

public void decryptNumbers() {
        String str, newString = " ";
        
        System.out.print("Numbers to decrypt: ");
        try {

            Scanner sc = new Scanner(System.in);
            str = sc.nextLine();

            for (int i = 0; i < str.length(); i++) {
                int test1 = Integer.parseInt(String.valueOf(i));


                switch (test1) {
                    case 0:
                        newString = newString + "a";
                        break;
                    case 1:
                        newString = newString + "b";
                        break;
                    case 2:
                        newString = newString + "c";
                        break;
                    case 3:
                        newString = newString + "d";
                        break;
                    case 4:
                        newString = newString + "e";
                        break;
                    case 5:
                        newString = newString + "f";
                        break;
                    case 6:
                        newString = newString + "g";
                        break;
                    case 7:
                        newString = newString + "h";
                        break;
                    case 8:
                        newString = newString + "i";
                        break;
                    case 9:
                        newString = newString + "j";
                        break;
                    case 10:
                        newString = newString + "k";
                        break;
                    case 11:
                        newString = newString + "l";
                        break;
                    case 12:
                        newString = newString + "m";
                        break;
                    case 13:
                        newString = newString + "n";
                        break;
                    case 14:
                        newString = newString + "o";
                        break;
                    case 15:
                        newString = newString + "p";
                        break;
                    case 16:
                        newString = newString + "q";
                        break;
                    case 17:
                        newString = newString + "r";
                        break;
                    case 18:
                        newString = newString + "s";
                        break;
                    case 19:
                        newString = newString + "t";
                        break;
                    case 20:
                        newString = newString + "u";
                        break;
                    case 21:
                        newString = newString + "v";
                        break;
                    case 22:
                        newString = newString + "w";
                        break;
                    case 23:
                        newString = newString + "x";
                        break;
                    case 24:
                        newString = newString + "y";
                        break;
                    case 25:
                        newString = newString + "z";
                        break;
                    case 26:
                        newString = newString + "æ";
                        break;
                    case 27:
                        newString = newString + "ø";
                        break;
                    case 28:
                        newString = newString + "å";
                        break;

                }
            }
        }
        catch(Exception e)
            {
                e.printStackTrace();
            }
            System.out.println("Decryption done:" + newString);
        }

标签: javaparsingencryptionswitch-statement

解决方案


我想我开始理解您以前的代码(最好将其包含在问题中):

你有过

char ch = Character.toLowerCase(str.charAt(i)); 
switch (ch) { 
    case '0': 
        newString = newString + "a"; 
        break;
    case '1':
        newString = newString + "a"; 
        break;
    // more cases here
}

而且您不知道如何处理字母“k”的大小写,因为为此您需要一个case '10':.

这是一个问题,因为“10”没有字符——数字“10”由两个字符组成。您无法处理一次只查看一个字符的代码。

这暗示了您的设计存在更深层次的问题。在您的设计中,输入包含“10”,它可能意味着两种不同的东西:

  • 它可能意味着“ba”
  • 它可能意味着“k”

使用当前的设计,您无法区分这两种情况。

修复设计的一种方法是将编码字母的数字分开,例如使用空格 ( ' ') 字符。那将意味着

  • “ba”被编码为“1 0”
  • “k”被编码为“10”

这将允许您区分这两种编码。


推荐阅读