要求用户提供包含文件名混淆的命令



在程序的这一部分中,我要求用户提供命令和文件名。命令可以是"read"、"content"或"count"。在所有不同的任务中,我都需要一个文件。我希望用户在控制台中键入以下内容:

read Alice's Adventures In Wonderland.txt

出于某种原因,我不知道如何在1个命令中实现这一点。现在,我首先询问文件名,然后询问如何处理它。下面的例子是"读取"命令,它询问一个文件并统计文件中的所有单词:

case "read":
int nrWords=countAllWords();
System.out.println("The number of words in this file is: "+nrWords+"n");
break;

private static int countAllWords() throws IOException
{
Scanner input=new Scanner(System.in);
System.out.println("Please enter file name: ");
String fileName=input.nextLine();
FileInputStream inputStream=new FileInputStream(fileName);
BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(inputStream));
String line=bufferedReader.readLine();
int nrWords=0;
while(line!=null)
{
String[] wordsInLine=line.split(" ");
nrWords=nrWords+wordsInLine.length;
line=bufferedReader.readLine();
}
return nrWords;
}

有人能解释一下我如何将这两个命令组合成一个感觉,让我的代码理解什么与什么相关吗?

相反,您可以在这里使用split函数来分解您的命令,如下所示:

String line = bufferedReader.readLine();
String command = line.split(" ")[0];
String fileName = line.substring(command.length);

这样一来,fileName将是String的其余部分,而命令只是第一个元素。command应该是命令,fileName应该是文件名。

如果您在一个输入中获得整个命令,您可以解析出第一个单词——理解这是"action"——然后剩下的就是文件名。

所以首先你会得到整个命令:

Scanner input=new Scanner(System.in);
System.out.println("Please enter command: ");
String command = input.nextLine();

然后你会想要解析出动作。它永远是第一个词。

String action = command.substring(0, command.indexOf(' ')).trim();
String fileName = command.substring(command.indexOf(' ')).trim();

现在,您可以检查操作是什么,并根据需要使用该文件。

字符串的indexOf方法将返回指定字符第一次出现的索引。在这种情况下,我们使用它来获得第一个空间的索引。请注意,如果字符不存在,indexOf将返回-1,因此您需要为此设置适当的陷阱。(示例场景:用户只输入"读取"而不输入文件名。(

相关内容

  • 没有找到相关文章

最新更新