Java中的替换密码.只在大写时进行编码


public static String EncodeString(String message, String subcode) { 
message.toUpperCase();
subcode.toUpperCase();

boolean valid = true;
if(subcode.matches("^[a-zA-Z]+") && subcode.length()==26) {
for(int i=0; i<26; i++){
for(int j = i+1; j<26; j++){
if(subcode.charAt(i)!=subcode.charAt(j)) {
valid = true;
break;
} else {
valid = false;


if(message.isEmpty() || subcode.isEmpty()) {
return "Error";
}

String encryptedString = "";

char[] alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();
char[] sub = subcode.toCharArray();

for (int k = 0; k < message.length(); k++) {
for (int l = 0; l < 26; l++) {
if (message.charAt(k) == alpha[l]) 
{
encryptedString += sub[j];
break;
}
// if there are any special characters
// add them directly to the string
char input = message.charAt(i);
if (message.charAt(i) < 'A' && message.charAt(i) > 'Z' || message.charAt(i) > 'a' && message.charAt(i) < 'z'); 
{
encryptedString += message.charAt(i);
break;
}
}
}

return encryptedString.toUpperCase();

}
}
}
}
}

}

我用Java编写了这段替换密码的代码。它接受一条消息和一个替换代码,然后使用替换代码对消息进行加密。然而,替代代码必须通过一些检查,例如长度为26个字母并且没有重复的字母,尽管当我运行此代码时,在子代码检查后没有发生任何事情。另一件事,我有一个问题是,消息只编码时,它是大写的,正如你可以看到,我已经试图使它,以便大写和小写字母加密,但这不起作用,我不太确定如何使它不区分大小写。

要使方法不区分大小写,您需要将方法的前两行更改为

message = message.toUpperCase();
subcode = subcode.toUpperCase();

如String类文档中所述:"String是常量;它们的值在创建后不能更改。String. touppercase()方法不会改变String,它返回一个所有字符都大写的新String。此外,用于检查是否有重复字符的代码似乎也不正确。当比较字符不同时,不应该使用break。我猜你是想把这个放在if语句的另一个分支里。这是一张简化版的复核支票:

if(subcode.matches("^[a-zA-Z]+") && subcode.length()==26) {
for(int i=0; i<26; i++){
for(int j = i+1; j<26; j++){
if(subcode.charAt(i) == subcode.charAt(j)) {
// duplicate character, not allowed
return "Error";
}
}
}
}

使用上面的代码,您可以删除valid布尔值,因为任何重复的字符都会导致方法返回。

最新更新