Java 打印加密文本两次,不加密每个句子的第一个字母

Java 打印加密文本两次,不加密每个句子的第一个字母,java,encryption,caesar-cipher,Java,Encryption,Caesar Cipher,有人能在我的代码中找到问题吗。我正在尝试使用缓冲区读取器为文本文件编写凯撒密码加密代码。文本文件都是小写的,并且包含一些标点符号。当我输出文件时,它会将加密代码打印两次,而不会移动每个句子的第一个字母。以下是我的代码块: while((line=bufferedReader.readLine())!=null) { for(int i=0;i<line.length();i++) { char enchar; char chr= line.c

有人能在我的代码中找到问题吗。我正在尝试使用缓冲区读取器为文本文件编写凯撒密码加密代码。文本文件都是小写的,并且包含一些标点符号。当我输出文件时,它会将加密代码打印两次,而不会移动每个句子的第一个字母。以下是我的代码块:

while((line=bufferedReader.readLine())!=null)
{
    for(int i=0;i<line.length();i++)
    {
        char enchar;
        char chr= line.charAt(i);
        if(chr >='a' && chr<='z')
        {
            enchar=(char)((chr -'a'+ keyvalue ) % 26 + 'a');
        }
        else
            enchar=chr;
        output+=String.valueOf(enchar);
    }
    bufferedWriter.write(output);
    bufferedWriter.newLine();
}
也许吧


您反复说过,您的纯文本文件只包含小写字母,但它不包含小写字母。每个句子的第一个字母显然是大写字母,如中所示

如果要处理大写字母,只需添加另一个子句:

char enchar;
char chr= line.charAt(i);
if(chr >='a' && chr<='z')
{
    enchar=(char)((chr -'a'+ keyvalue ) % 26 + 'a');
}
else if(chr >='A' && chr<='Z')
{
    enchar=(char)((chr -'A'+ keyvalue ) % 26 + 'A');
}
else
    enchar=chr;
output+=String.valueOf(enchar);

keyvalue是如何从中获取其值的?通过传递为:int keyvalue=input.nextInt;嘿,有人来帮我吗?你可以发布示例输入和你得到的输出吗?输入文本文件是这样的,移位为2:它们推动人类前进。虽然有些人可能认为他们是疯子,但我们看到的是天才。这里是输出:Tjga rwuj vjg jwocp tceg hqtyctf。Apf yjkng uqog oca ugg vjgo cu vjg etcba qpgu、yg ugg igpkwu。Tjga rwuj vjg jwocp tceg hqtyctf。Apf yjkng uqog oca ugg vjgo cu vjg etcba qpgu,yg ugg igpkwu。您可以回答您的问题。请检查是否有解决问题的答案。如果有,请接受。
char enchar;
char chr= line.charAt(i);
if(chr >='a' && chr<='z')
{
    enchar=(char)((chr -'a'+ keyvalue ) % 26 + 'a');
}
else if(chr >='A' && chr<='Z')
{
    enchar=(char)((chr -'A'+ keyvalue ) % 26 + 'A');
}
else
    enchar=chr;
output+=String.valueOf(enchar);
while((line=bufferedReader.readLine())!=null)
{
    output = ""; // <---- THIS
    for(int i=0;i<line.length();i++)
    {
        ...
        output+=String.valueOf(enchar);
    }
    bufferedWriter.write(output);
    bufferedWriter.newLine();
}