从ASCII值转换为Char

时间:2010-09-24 05:47:01

标签: java ascii

String source = "WEDGEZ"
char letter = source.charAt(i);
shift=5;
for (int i=0;i<source.length();i++){
if (source.charAt(i) >=65 && source.charAt(i) <=90 )
  letterMix =(char)(('D' + (letter - 'D' + shift) % 26));
}

好的我正在尝试的是取字符串WEDGEZ,并将每个字母移动5,因此W变为B而E变为J等。但是我觉得我使用的数字有些不一致。

对于if语句,我正在使用ASCII值,并且用于 letterMix= statement,我正在使用1-26中的数字(我认为)。实际上,问题也是如此:

是什么 (char)(('D' + (letter - 'D' + shift) % 26));还是会回来的吗?它返回一个char权限,但是从int转换。我在网上发现了这个声明,我完全不是自己写的,所以这个声明究竟是什么回归。

这段代码的一般问题是,对于W,它返回'/',对于Z,它返回_,我猜这意味着它使用的是ASCII值。我真的不知道如何处理这个问题。

编辑:新代码

    for (int i=0;i<source.length();i++)
        {
        char letter = source.charAt(i);
        letterMix=source.charAt(i);
        if (source.charAt(i) >=65 && source.charAt(i) <=90 ){
            letterMix=(char)('A' + (  ( (letter - 'A') + input ) % 26));
            }
        }

2 个答案:

答案 0 :(得分:4)

嗯,我不确定这个作业是否合适,所以我会对代码感到吝啬。

你正在写一个移位为5的Caesar Cipher

解决您的Z - &gt; _问题...我假设您希望将所有字母更改为编码字母(而不是奇怪的符号)。问题是A-Z的ASCII值介于65和90之间。 在编码Z时(例如),你最终会向它添加5,这给你的值为95(_)。

您需要做的是绕过可用的字母表。首先隔离,字符在字母表中的相对位置(即A = 0,B = 1 ......)你需要减去65(这是A的ASCII。添加你的Shift然后应用modulus 26。这将导致你的价值回归。

例如,它是您的编码Z,(ASCII = 90),因此相对位置是25(= 90 - 65)。 现在,25 + 5 = 30,但你需要的值在26以内。所以你需要modulus 26 所以30 % 264E

所以这是

char letter = message(i);
int relativePosition = letter - 'A'; // 0-25
int encode = (relativePosition + shift) % 26
char encodedChar = encode + 'A' // convert it back to ASCII.

所以在一行中,

char encodedChar = 'A' + (  ( (letter - 'A') + shift ) % 26)

注意,这仅适用于大写,如果您计划使用小写,则需要一些额外的处理。

您可以使用Character.isUpperCase()来检查大写字母。

答案 1 :(得分:0)

Ascii类{

public static void main(String [] args){

warning: Immediate deletion does not wait for confirmation that the running resource has been terminated. The resource may continue to run on the cluster indefinitely.
Error from server (NotFound): pods "deployment-6sj54" not found

}