package edu.secretcode;
import java.util.Scanner;
/**
* Creates the secret code class.
*
* @author
*
*/
public class SecretCode {
/**
* Perform the ROT13 operation
*
* @param plainText
* the text to encode
* @return the rot13'd encoding of plainText
*/
public static String rotate13(String plainText) {
StringBuffer cryptText = new StringBuffer("");
for (int i = 0; i < plainText.length() - 1; i++) {
char currentChar = plainText.charAt(i);
currentChar = (char) ((char) (currentChar - 'A' + 13) % 26 + 'A');
cryptText.append(currentChar);
if (currentChar <= 'A' || currentChar >= 'Z') {
cryptText.append(plainText.charAt(i));
}
else {
currentChar = (char) ((char) (currentChar - 'A' + 13) % 26 + 'A');
cryptText.append(currentChar);
}
}
return cryptText.toString();
}
/**
* Main method of the SecretCode class
*
* @param args
*/
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
while (1 > 0) {
System.out.println("Enter plain text to encode, or QUIT to end");
Scanner keyboard = new Scanner(System.in);
String plainText = keyboard.nextLine();
if (plainText.equals("QUIT")) {
break;
}
String cryptText = SecretCode.rotate13(plainText);
String encodedText = SecretCode.rotate13(plainText);
System.out.println("Encoded Text: " + encodedText);
}
}
}
各位大家好,我希望这个程序能够对大写字母进行编码,并保留其他字符并将它们传递给输出。例如&#34; HELLO WORLD!&#34;应该在运行程序后成为&#34; URYY \ d_YQ!&#34;我得到了YLUHREYLYLBOWJJWBOERYLQDXK而不是&#34; URYY \ d_YQ!&#34;这是我想要得到的。如果有人能让我知道我做错了什么我会非常感激。提前谢谢。
答案 0 :(得分:1)
如果使用字符串匹配正则表达式会更容易。
首先,在循环条件中,消除-1
。否则你只能使用倒数第二个字符。
接下来,消除if语句之前的cryptText.append(currentChar);
。
然后,使用此
char currentChar = plainText.charAt(i);
String cS = currentChar+"";
currentChar = (char) ((char) (currentChar - (int)'A' + 13) % 26 + (int)'A');
if (!cS.matches("[A-Z]")) {
cryptText.append(plainText.charAt(i));
}
else {
cryptText.append(currentChar);
}
这实际上有效,除了我从你想要的东西中得到一些不同的角色。你好,世界! =&GT; URYYB JBEYQ!