gpt4 book ai didi

Java替换方法问题

转载 作者:行者123 更新时间:2023-12-02 03:44:24 25 4
gpt4 key购买 nike

我正在尝试为我的计算机科学类(class)做一个名为“加密/解密”的项目

代码如下

import java.io.*; 
import java.util.*;
import java.io.*;
import java.util.*;

public class Tester {
public static void main(String args[]) {
Scanner kbReader = new Scanner(System.in);
System.out.print("Enter a sentence that is to be encrypted: ");
String sntnc = kbReader.nextLine();
System.out.println("Original Sentence = " + sntnc);

Crypto myCryptObj = new Crypto();
String encryptdSntnc = myCryptObj.encrypt(sntnc);
System.out.println("Encrypted sentence = " + encryptdSntnc);

String decryptdSntnc = myCryptObj.decrypt(encryptdSntnc);
System.out.println("Decrypted sentence = " + decryptdSntnc);
}
}

class Crypto {
public String encrypt(String sntnc) {
sntnc = sntnc.replace("m", "ssad");
sntnc = sntnc.replace("b", "dug>?/");
sntnc = sntnc.replace("g", "jeb..w");
sntnc = sntnc.replace("v", "ag',r");
return sntnc;
}

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

问题不在 Tester 类中,而是在 Crypto 类中。

输入是:这是一个非常重要的早晨。代码应该输出:

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.

但是加密句子行正在打印:

This is a ag',rery dujeb..w>?/ijeb..w ssadorninjeb..w.

sntnc.replace 方法正在替换已经替换的字母。我该如何修复它,使它不会两次替换东西?

最佳答案

问题来自于您替换字符串的逻辑:

sntnc = sntnc.replaceAll("b", "dug>?/");  // <-- replaces with a "g" here
sntnc = sntnc.replaceAll("g", "jeb..w"); // <-- so that "g" is also getting replaced here

一个简单的解决方案是使用 replaceAll 删除。通过重新排序 replaceAll 调用来使代码正常工作是非常脆弱的:您不知道将来有人会更改正在替换的内容并破坏所有内容。

通过迭代字符来构建字符串时,解决方案要简单得多。因为我们在构建字符串时有一个独特的临时容器,所以在替换时不会发生冲突。

public String encrypt(String sntnc) { 
StringBuilder sb = new StringBuilder();
for (char ch : sntnc.toCharArray()) {
if (ch == 'm') sb.append("ssad");
else if (ch == 'b') sb.append("dug>?/");
else if (ch == 'g') sb.append("jeb..w");
else if (ch == 'v') sb.append("ag',r");
else sb.append(ch);
}
return sb.toString();
}

关于Java替换方法问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35277675/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com