如何将数字加密为正确的字符串

问题描述 投票:0回答:1

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

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

我尝试过使用

char ch = Character.toLowerCase(str.charAt(i));
并且我的
ch
中有
switch
,但是当我达到数字 10+ 时,这给我带来了问题。

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);
        }
java parsing encryption switch-statement
1个回答
0
投票

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

你有

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”

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

© www.soinside.com 2019 - 2024. All rights reserved.