java - 环绕字符中的字符

标签 java

我注意到我的程序中有一个小故障。它将解密除 a/b 和 c(不包括 d)之外的每个字符。这是因为它移位了 -4。很明显,它们是字母表中唯一循环的字符......我注意到 y = 121 '-' = 95 ( 121-95=26 ) 和 w = 119 ']' = 93 ( 119-93 =26),“x”= 120,“^”= 94(120-94=126)。

if (p.isLetter(element))
{
    p = (char) (element + 5);
}
if(element > 'z' && Character.isLetter(element))
{
    element = (char)(element - 26);
}
else if(Character.isLetter(element))
{    element = (char)(element+ 26);
} 

最佳答案

问题是,如果您将字符移动到 a 到 z 的范围之外,则 isLetter() 将返回 false,因此应用移动后的两个测试将不会得到满足,因为该字符不再是字母。

像这样将 isLetter() 测试放在整个 block 周围,并将其从其他 if 中删除:

if (Character.isLetter(character))
{
    character = (char) (character + shift);
    if(character > 'z')
    {
        character = (char)(character - 26);
    }
    else if(character < 'a')
    {
        character = (char)(character + 26);
    }
}

该函数仅处理小写字母,因此将检查从 isLetter() 更改为:

if((character >= 'a') && (character <= 'z'))

如果需要,大写字母可以单独处理。

关于java - 环绕字符中的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33193256/

相关文章:

java - 是否可以为接口(interface)类型创建对象

java - 如何在selenium中读取excel中的测试数据

java - JScrollPane 中的动态 JTextArea 最终位于滚动条下方

java - 检测物体颜色各种光照OpenCV Java

java - LibGDX 如何使用 Sprites 和 SpriteBatch 在单个位置组合 2 个纹理以进行多重纹理

java - 在缓存中未找到元素 - 也许页面自查找以来已发生更改 - 为什么?

azure - 如何访问远程hadoop系统(Azure上的沙箱)

java - 带有注释的Bean定义继承?

java - 有什么方法可以以编程方式关闭 Java 进程但不调用 JVM 关闭 Hook ?

java : "Missing return statement"