【问题标题】:Simple encryption of a String in JavaJava中字符串的简单加密
【发布时间】:2017-10-11 15:56:25
【问题描述】:

我想编写一个程序,它将接受一个字符串并将 2 添加到字符串的每个字符这非常简单这是我的代码。 示例:-

String str="ZAP YES";
nstr="BCR AGU" //note Z=B and Y=A

String str=sc.nextLine();
String nstr=""    
for(int i=0;i<str.length();i++)
    {
        char ch=sc.charAt(i);
        if(ch!=' ')
        {
            if(ch=='Z')
                ch='B';
            else if(ch=='Y')
                ch='A';
            else
                ch=ch+2;
        }
        nstr=nstr+ch;
    }

现在我想将每个字符增加 n(而不是 2),这真的是我无法解决的问题。

我可能会考虑使用 n%26 ,并为条件使用循环,但我无法解决如何实现它。

【问题讨论】:

  • 想一想如果您将 ch 设为 'z' 会发生什么?如果你的字符的 ascii char 值为 256 会怎样?
  • 'by n' 是什么意思?
  • n 是一个变量,因为在第一种情况下它是 2 现在它是在运行时决定的。
  • 请注意,可以假设输入字符串仅包含从大写“A”到“Z”的空格和字符。
  • 因为 ASCII 'Z' 是 90,只要测试你的 char 是否 > 90,如果是则减去 26

标签: java string cryptography character


【解决方案1】:

使用% 26 是正确的想法。缺少的部分是您的范围不是从零开始的。您可以通过减去“A”来模拟从零开始的范围(即,将“A”视为 0,将“B”视为 1 等),然后读取它:

for (int i = 0; i < str.length(); i++) {
    char ch = str.charAt(i);
    if (ch != ' ') {
        ch = (char)((ch - 'A' + n) % 26 + 'A');
    }

    nstr += ch;
}

【讨论】:

  • 刚刚编译了你的代码,它工作得非常完美,谢谢。
  • 可以在 2 分钟内接受你的答案,SO 说
【解决方案2】:

你必须:

  1. 将您的角色重新映射到 0-26 索引
  2. 将增量添加到该索引
  3. 对结果应用 26 mod
  4. 将索引重新映射回 ASCII

例子:

public static char increment(char c, int n) {
   return (char) (((c - 'A') + n) % 26 + 'A');
}

public static void main(String[] args) {
  System.out.println(increment('Z', 1)); // returns 'A'
  System.out.println(increment('Z', 2)); // returns 'B'
}

【讨论】:

  • 您迟到了一分钟,先生无法接受您的回答,但它帮助了我,因此我 +1。
  • 啊哈下次我会先发布代码,然后用 cmets 编辑:) 快乐编码!
猜你喜欢
  • 2011-07-10
  • 1970-01-01
  • 2010-10-19
  • 2017-02-28
  • 2012-10-29
  • 2017-10-08
  • 2013-04-03
  • 2010-12-27
  • 1970-01-01
相关资源
最近更新 更多