Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 字符串替换方法|加密和解密_Java_String_Encryption_Replace - Fatal编程技术网

Java 字符串替换方法|加密和解密

Java 字符串替换方法|加密和解密,java,string,encryption,replace,Java,String,Encryption,Replace,任务非常简单: 你刚刚被中央情报局聘为加密部门的程序员。您的工作是编写一个名为Crypto的类。encrypt方法将接受表示要加密的句子的字符串。它将返回一个字符串,即所有v的大小都替换为“ag',r”,所有m的大小都替换为“ssad”,所有g的大小都替换为“jeb..w”,所有b的大小都替换为“dug>?/” 该类包含另一个方法decrypt,该方法接受表示要解密的句子的字符串。在该方法中,执行上述反向过程。它返回一个字符串,该字符串是加密前的原始语句 我的加密和解密方法工作得非常好。只是它没

任务非常简单:

你刚刚被中央情报局聘为加密部门的程序员。您的工作是编写一个名为Crypto的类。encrypt方法将接受表示要加密的句子的字符串。它将返回一个字符串,即所有v的大小都替换为“ag',r”,所有m的大小都替换为“ssad”,所有g的大小都替换为“jeb..w”,所有b的大小都替换为“dug>?/”

该类包含另一个方法decrypt,该方法接受表示要解密的句子的字符串。在该方法中,执行上述反向过程。它返回一个字符串,该字符串是加密前的原始语句

我的加密和解密方法工作得非常好。只是它没有加密/解密它应该如何加密/解密。以下是示例测试运行的外观:

Enter a sentence that is to be encrypted: *This is a very big morning.* 
Original sentence = This is a very big morning.
Encrypted sentence = This is a ag',rery dug>?/ijeb..w ssadorninjeb..w. 
Decrypted sentence = This is a very big morning.
以下是我的输出结果:

Enter a sentence that is to be encrypted: This is a very big morning. 
Original sentence = This is a very big morning.
Encrypted sentence = This is a ajedug>?/..w',rery dug>?/ijedug>?/..w ssadorninjedug>?/..w.
Decrypted sentence = This is a very big morning.
正如你所知,加密的句子并不完全匹配,我知道为什么,我只是不知道如何修复它

以下是我的方法:

String encrypt(String string) {
    return string
            .replace("v", "ag',r").replace("V", "ag',r")
            .replace("m", "ssad").replace("M", "ssad")
            .replace("g", "jeb..w").replace("G", "jeb..w")
            .replace("b", "dug>?/").replace("B", "dug>?/");

}

String decrypt(String string) {
    return string
            .replace("dug>?/", "b")
            .replace("jeb..w", "g")
            .replace("ssad", "m")
            .replace("ag',r", "v");
}

感谢您的帮助/指导

您的输出是错误的,因为您将v替换为ag',r,但随后将ag',r中的g替换为jeb..w。您不应该替换已替换的内容

要解决这个问题,您需要从一个空字符串开始,并分别检查每个字符。如果是v、m、g或b,则将相应的乱码附加到字符串中。如果不是这些字母中的任何一个,则附加该字母

在这里,我使用了StringBuilder:

编辑:

任务特别说明使用字符串方法,而不是任何外部类

在这种情况下,您不能使用StringBuilder,必须使用字符串,但这是相同的想法。您只需使用+=来附加到它


您也可能无法使用forEach。您需要一个正常的for循环来循环字符串的索引。

其他方法可以假设在原始文本中不会出现{1}、{2}、{3}、{4}标记,以执行以下操作:

static String encrypt(String string) {
    String encryptedWithNumbers = string
          .replace("v", "{1}")
          .replace("V", "{1}")
          .replace("m", "{2}")
          .replace("M", "{2}")
          .replace("g", "{3}")
          .replace("G", "{3}")
          .replace("b", "{4}")
          .replace("B", "{4}");

     return encryptedWithNumbers
          .replace("{1}", "ag',r")
          .replace("{2}","ssad")
          .replace("{3}", "jeb..w")
          .replace("{4}", "dug>?/");
}

谢谢大家的帮助!以下是我的最终工作代码:

String encrypt(String string) {

    String s = "";

    for (int i = 0; i < string.length(); i++) {
        char c = string.charAt(i);
        if (c == 'v' || c == 'V') {
            s += "ag',r";
        } else if (c == 'm' || c == 'M') {
            s += "ssad";
        } else if (c == 'g' || c == 'G') {
            s += "jeb..w";
        } else if (c == 'b' || c == 'B') {
            s += "dug>?/";
        } else {
            s += c;
        }
    }

    return s;

}

你正在做几个后续的替换。所以你先用ag',r代替tye v,然后用jeb..w代替g。但是您只需要替换原始字符串的字符。不是先前替换引入的字符。您必须执行一次传递。您的实现:v的出现被应用于整个短语的ag',r替换,然后ag',r的g被jeb..w替换-这不是原始任务所期望的。基本上,您不能使用replace方法,您需要一个字母一个字母地迭代短语,并使用例如StringBuilder来组装一个新短语。@VladimirL。我意识到了这个问题。我只是不知道怎么修。任务特别说明使用字符串方法,而不是任何外部类。有什么想法吗?@Krish请看我答案的编辑。
String encrypt(String string) {

    String s = "";

    for (int i = 0; i < string.length(); i++) {
        char c = string.charAt(i);
        if (c == 'v' || c == 'V') {
            s += "ag',r";
        } else if (c == 'm' || c == 'M') {
            s += "ssad";
        } else if (c == 'g' || c == 'G') {
            s += "jeb..w";
        } else if (c == 'b' || c == 'B') {
            s += "dug>?/";
        } else {
            s += c;
        }
    }

    return s;

}