java - 字符串替换方法 |加密与解密

标签 java string encryption replace

任务非常简单:

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

该类包含另一个方法,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' 中的 g ,rjeb..w。您不应该替换已经替换的内容。

要解决此问题,您需要从空字符串开始,并单独检查每个字符。如果它是 vmgb,则将相应的乱码附加到字符串中。如果不是这些字母,则附加该字母。

在这里,我用 StringBuilder 做到了这一点:

private static String encrypt(String s) {
    StringBuilder builder = new StringBuilder();
    s.chars().forEach(x -> {
        char c = (char)x;
        if (c == 'v' || c == 'V') {
            builder.append("ag',r");
        } else if (c == 'm' || c == 'M') {
            builder.append("ssad");
        } else if (c == 'g' || c == 'G') {
            builder.append("jeb..w");
        } else if (c == 'b' || c == 'B') {
            builder.append("dug>?/");
        } else {
            builder.append(c);
        }
    });
    return builder.toString();
}

编辑:

The task specifically says to use string methods and not any external classes

在这种情况下,您不能使用 StringBuilder 而必须使用 String,但这是相同的想法。您只需使用 += 附加到它即可。

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

关于java - 字符串替换方法 |加密与解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52906097/

相关文章:

arrays - 给定一个字符串数组,如果每个字符串都可以连接到其他字符串,则返回 true

java - 关于 PCI-DSS 合规性 - 文件加密

java - 使用 Box2D 在 libgdx Actor 上输入监听器

java - 如何将秒数转换为 hhmmss

java - 如何将res文件从项目放到同一文件夹中的jar中?

java - Servlet打不开txt

ruby - 这里文档给出了 Ruby IO 中的 EOF 错误

c++ - 控制台输出不断崩溃

ruby - OpenSSL 命令行和 Ruby OpenSSL 库在使用相同参数加密文本时有所不同

ssl - 您如何设置加密的 mosquitto 代理程序,例如具有 https 的网页?