【问题标题】:Can't compare 2 strings if a letter in first string exists in second string - java如果第二个字符串中存在第一个字符串中的字母,则无法比较两个字符串 - java
【发布时间】:2021-04-29 10:10:56
【问题描述】:

但是,我有一个与我在 (text) 下已有的文本相关的 Java 编程任务。 该功能应该如下

getEncryptedText(int shift)

如果要操作的文本是使用凯撒密码的明文,则返回密文的字符串表示形式。

旋转次数取决于移位值; 正移值代表右旋转,负移值代表左旋转 回转。但是,与 Wikipedia 中的说明不同,此方法使用以下字符串作为 清楚的: 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

上述以外的其他字符将按原样处理(即不会被加密)

*延伸阅读:https://en.wikipedia.org/wiki/Caesar_cipher


所以这是我到目前为止所做的类方法,我想知道如何保留未包含在明文中的文本字符,例如“!,@,#,$,%......等等”。到目前为止,我尝试了所有方法,但无法成功,但其余的似乎都很好!

public String getEncryptedText(int shift) {
  
    String ALPHABET = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";

    String cipherText = "";
    for (int i = 0; i < text.length(); i++){
    {
        int charPosition = ALPHABET.indexOf(text.charAt(i));
        
        if(text.charAt(i) == ' ') {
            
            cipherText += " ";
        
        }
        
        else
        {      
        int keyVal = (shift + charPosition) % 62;
        
        char replaceVal = ALPHABET.charAt(keyVal);
        cipherText += replaceVal;
        }
    }
    }
    return cipherText;
}

【问题讨论】:

    标签: java string encryption compare


    【解决方案1】:

    考虑修改您的 if 语句并使用 StringBuilder 类:

    class Main {
        public static void main(String[] args) {
            CesarCypherHelper cesarCypherHelper = new CesarCypherHelper();
            System.out.println(cesarCypherHelper.getEncryptedText("Hello World!", 2));
            System.out.println(cesarCypherHelper.getEncryptedText("Hello World!", 64));
        }
    }
    
    class CesarCypherHelper {
        public String getEncryptedText(String text, int shift) {
            String ALPHABET =
                    "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
            StringBuilder encryptedText = new StringBuilder();
            for (int i = 0; i < text.length(); i++) {
                char ch = text.charAt(i);
                int charPosition = ALPHABET.indexOf(ch);
                if (charPosition == -1) {
                    encryptedText.append(ch);
                } else {
                    int keyVal = (shift + charPosition) % ALPHABET.length();
                    encryptedText.append(ALPHABET.charAt(keyVal));
                }
            }
            return encryptedText.toString();
        }
    }
    

    输出:

    Jgnnq Yqtnf!
    Jgnnq Yqtnf!
    

    【讨论】:

      猜你喜欢
      • 2018-04-23
      • 1970-01-01
      • 1970-01-01
      • 2020-06-21
      • 1970-01-01
      • 2015-04-27
      • 2020-02-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多