有人可以在我的代码中找到问题。我正在尝试使用缓冲读取器为文本文件编写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();
}
答案 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();
}