java - 字符串替换方法 | 加解密
问题描述
任务很简单:
你刚刚被中央情报局聘为加密部门的程序员。你的工作是编写一个名为 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
,然后将g
inag',r
替换为jeb..w
。您不应该替换已经替换的内容。
要解决此问题,您需要从一个空字符串开始,并单独检查每个字符。如果它是v
、m
、g
或b
,则将相应的乱码附加到字符串中。如果不是这些字母,则附加该字母。
在这里,我就是这样做的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();
}
编辑:
该任务专门说要使用字符串方法而不是任何外部类
在这种情况下,您不能使用 aStringBuilder
并且必须使用 a String
,但这是相同的想法。你只是+=
用来附加到它。
您也可能无法使用forEach
。您需要一个普通的 for 循环来遍历字符串的索引。
推荐阅读
- python - Python 输入,不需要的重复提示
- javascript - 如何使用 React mobx lite 按 id 正确获取数据?
- python-3.x - 如何摆脱这个 TypeInput 错误?
- typescript - React/Nextjs with GraphQL:将数据发布到后端(Spring)获取空对象
- javascript - NextJS - 如何组合两个 getServerSideProps 包装器?
- python - 错误:找不到 psycopg2==2.7.3.2 的匹配分布
- r - st_intersection 返回具有 0 个观察值的数据帧
- android - 如何在 Gradle 6.7.1 + 中为每个构建变体使用不同的 manifestPlaceholder?
- android - 如何切换Android SurfaceView实现双摄像头缩放效果?
- css - 倾斜渐变背景空白