我正在尝试模拟终端/文件系统。现在我正在解析和标记命令。
我正在尝试确定什么是有效命令。我的策略是检查输入数组中的索引2元素是否为字符串" empty"以外的其他元素。如果是,我的checkValidCommand
方法将返回false。
我正在运行程序并输入"hi"
输入时出现此错误:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
at fileSystem2.MainActivity.checkValidCommand(MainActivity.java:43)
at fileSystem2.MainActivity.main(MainActivity.java:66)
我认为这个问题是由于String[] input
只有3个元素造成的。
代码:
检查有效输入。
private static boolean checkValidCommand(String[] commandTokens) {
//boolean valid = false;
if (commandTokens[0].equals("exit")) {
return true;
}
else if (!commandTokens[2].equals("empty")) {
return false;
}
return true;
}
解析命令的代码
String[] input = new String[3];
for (int i = 0; i < input.length; i++) {
input[i] = "empty";
}
while(!input[0].equals("exit")) {
Scanner sc = new Scanner(System.in);
input = sc.nextLine().split(" ");
if (checkValidCommand(input)) {
System.out.print("Invalid Command!");
continue;
}
System.out.println(input.length);
switch(input[0]) {
// vi
case "vi":
System.out.println("hi");
break;
// ls
case "ls":
break;
// mkdir
case "mkdir":
break;
// pwd
case "pwd":
break;
}
}
答案 0 :(得分:1)
命令
input = sc.nextLine().split(" ");
不使用数据填充现有数组(由input
引用)。
它会创建一个 new 数组,并将其引用分配给input
。
无论input
指向什么,都会被取消引用并成为垃圾收集的对象。
答案 1 :(得分:1)
我不确定如何在Java中获取数组的长度(我假设这个答案是array.length()
,所以请原谅我,如果我弄错了)但基本上你是&#39;重新访问第二个元素而不确保sc.nextLine().split(" ");
实际上会为你返回3个元素......
所以我建议改变:
if (checkValidCommand(input)) {
要
if (input.length() > 2 && checkValidCommand(input)) {