0

在我的程序中,有时它会要求用户输入,并且在输出相同的输入但带有一些replaceAll(). 这是我想做的事情:

数组表:

public static String[][] Alphabet = {

        {"a", "w"}, // 0 0 / 0 1
        {"b", "t"}, // 1
        {"c", "e"}, // 2
        {"d", "k"}, // 3
        {"e", "c"}, // 4
        {"f", "j"}, // 5
        {"g", "h"}, // 6
        {"h", "g"}, // 7
        {"i", "o"}, // 8
        {"j", "f"}, // 9
        {"k", "d"}, // 10
        {"l", "s"}, // 11
        {"m", "q"}, // 12
        {"n", "y"}, // 13
        {"o", "i"}, // 14
        {"p", "u"}, // 15
        {"q", "m"}, // 16
        {"r", "v"}, // 17
        {"s", "l"}, // 18
        {"t", "b"}, // 19
               //etc....

然后进一步降低我的代码:

            Scanner Mode1_Input = new Scanner(System.in);
            String mode1_input = new String(Mode1_Input.nextLine());

            if(mode1_input != null && !mode1_input.isEmpty()){
                for(int i = 0; i < 62; i++){ // 62 = [a-z]+[A-Z]+[0-9]
                    mode1_input = mode1_input.replaceAll(Alphabet[i][0], Alphabet[i][1]);

                }
                System.out.println(mode1_input);
                            //etc...

问题是:“a”将替换为“w”:所以“a”现在是“w”。但是当'w'来的时候,它会重新变成'a'!:(

是否有可能让它查看每个字符一次以避免这种烦人的变化?

查看问题的其余部分,查看以下帖子的评论:“不知道名称”

'No Idea for Name' 的更多代码:

    public static String[][] Alphabet = {
            {"a", "1"},
            {"b", "2"},
            {"c", "3"},
            {"d", "4"},
            {"e", "5"},
            {"f", "6"},
            {"g", "7"},
            {"h", "8"},
            {"i", "9"},
            {"j", "10"},
            {"k", "11"},
            {"l", "12"},
            {"m", "13"},
            {"n", "14"},
            {"o", "15"},
            {"p", "16"},
            {"q", "17"},
            {"r", "18"},
            {"s", "19"},
            {"t", "20"},
            {"u", "21"},
            {"v", "22"},
            {"w", "23"},
            {"x", "24"},
            {"y", "25"},
            {"z", "26"},

            {"1", "w"},
            {"2", "t"},
            {"3", "e"},
            {"4", "k"},
            {"5", "c"},
            {"6", "j"},
            {"7", "h"},
            {"8", "g"},
            {"9", "o"},
            {"10", "f"},
            {"11", "d"},
            {"12", "s"},
            {"13", "q"},
            {"14", "y"},
            {"15", "i"},
            {"16", "u"},
            {"17", "m"},
            {"18", "v"},
            {"19", "l"},
            {"20", "b"},
            {"21", "p"},
            {"22", "r"},
            {"23", "a"},
            {"24", "z"},
            {"25", "n"},
            {"26", "x"},
}
... (Skiping Scanner and other...)
for(int i = 0; i < 52; i++){
                    mode1_input = mode1_input.replaceAll(Alphabet[i][0], Alphabet[i][1]);   
                }
                System.out.println(mode1_input);

Thanks, 3751_Creator
4

2 回答 2

0

您可以将 'w' 更改为不同的字符,也许更改为不会像 128 以上的任何字符一样使用的字符,然后在将 'a' 更改为 'w' 后将其替换回来

于 2013-08-12T16:33:09.200 回答
0

使用 HashMap 并将 Alphabet[i][1] 值存储在其中,并检查 Alphabet[i][0] 是否已经在 hashmap 上并执行 replaceAll。如果该值已经在 hashmap 中,则意味着您已经使用它来进行替换,所以不要进行替换。否则用 Alphabet[i][1] 替换 Alphabet[i][0] 并将 Alphabet[i][1] 放入 hashMap

于 2013-08-12T16:40:05.137 回答