java - 为什么它不能给我想要的输出?

标签 java

我已经在这个项目上工作了大约 2 周,但我似乎无法弄清楚为什么它不会给我

我想要的输出是 -

原句=这是一个很大的早晨。

加密语句=This is a ag',rery dug>?\ijedug>?..w ssadorninjedug>?..w.

解密句子=这是一个非常大的早晨。

但是我似乎一直在-

原句 = This is a very big morning.

加密句=这是一个很挖>?/ig的早晨。

解密句子=这是一个非常大的早晨。

  • 我已经尝试了很多方法,比如改变周围的字母,完全改变代码,但总是显示“这是一个非常无聊的>?ig morning”。

这是我的代码-

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

public class ED { 

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 x1; 

public String acceptor(String sntnc) { 
    String x1 = sntnc; 
    return x1; 
} 

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

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

最佳答案

Java 的 Stringimmutable .您无法更改它们。

所以你必须在加密/解密后返回一个新的字符串。

幸运的是,所有生成新字符串的 String 方法实际上都创建了一个新字符串。 替换包含在内。

所以使用这个:

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

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

或更短(确保使用您的 IDE 进行格式化):

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

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

替换顺序在这里很重要,所以要小心

关于java - 为什么它不能给我想要的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28791519/

相关文章:

java - 如何在java中查找整数数组大小

java - 希望每次调用都保存以提交

java - 如何在多个方法中使用数组

java - 使用 RabbitMq MessageListenerContainer 的 Reactor Flux 超时

java - 编写一个Java正则表达式

java - 调用多个 AuthenticationSuccessHandler 的最干净的方法?

java - 发送带有Jpcap问题的SYN包

java - 鼠标悬停触发 JXCollapsiblePane

java - Swing 架设置尺寸

java - "Global"文本输入中的热键除外