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

时间:2015-10-13 22:03:07

标签: java encryption caesar-cipher

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

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();
}

2 个答案:

答案 0 :(得分:0)

也许

  bufferedWriter.write(output);
  bufferedWriter.newLine();
  bufferedWriter.flush();
}
bufferedWriter.close();

答案 1 :(得分:0)

你已经反复说过你的纯文本文件只包含小写字母,但事实并非如此。每个句子的第一个字母显然是your comment中的大写字母。

如果你也想处理大写字母,那么只需添加另一个子句:

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);

现在,双重打印的发生是因为您不断地将密文字符附加到output,而且在每行之后还将output写入Writer。您需要为每一行开始一个新的output

while((line=bufferedReader.readLine())!=null)
{
    output = ""; // <---- THIS
    for(int i=0;i<line.length();i++)
    {
        ...
        output+=String.valueOf(enchar);
    }
    bufferedWriter.write(output);
    bufferedWriter.newLine();
}