对于我的计算机科学课,我必须创建一个接受两个或三个命令行参数的Caesar Cypher,第一个是键,即消息中每个字母将被移动的量,第二个是包含原始参数的文件。消息,第三个是可选的,如果存在,它将创建带有加密代码的指定文件,如果不存在,则输出显示在屏幕上。一切正常,除了删除空格,例如,如果我输入5且消息“ Hello,我的名字叫戴夫。”,它会显示“ Mjqqt1r〜sfrjnxIf {j3”,如果我输入-5和“ Mjqqt1r〜sfrjnxIf {j3”,它显示“ Hello,mynameisDave”。如何使它不删除空格?
import java.io.*;
import java.util.*;
public class Caesar
{
public static void main(String[] args)
{
int key = Integer.parseInt(args[0]);
Scanner in = null;
PrintWriter out = null;
try
{
in = new Scanner(new File(args[1]));
if(args.length == 3)
{
out = new PrintWriter(args[2]);
}
while(in.hasNextLine())
{
char[] charVal = in.next().toCharArray();
for(int i = 0; i < charVal.length; i++)
{
if(charVal[i] < 32 || charVal[i] > 126)
{
charVal[i] = charVal[i];
}
else
{
charVal[i] = (char) (charVal[i] + key);
}
if(charVal[i] > 126)
{
charVal[i] = (char) (charVal[i] - 95);
}
else if(charVal[i] < 32)
{
charVal[i] = (char) (charVal[i] + 95);
}
}
if(out != null)
{
out.print(charVal);
}
else
{
System.out.print(charVal);
}
}
}
catch (FileNotFoundException e)
{
System.out.println("Error: File not found.");
e.printStackTrace();
}
finally
{
in.close();
if(out != null)
{
out.close();
}
}
}
}
最佳答案
尝试使用in.nextLine()
代替in.next()
。 in.next()
基本上会寻找下一个单词,并一次给您一个单词。这就是为什么空间消失的原因。