命令行参数 java * 正在超载以获取文件名
command line arguments java * is being overloaded to pick up filenames
我正在 java 中编写最简单的计算器,它使用命令行 arguments.Everything 工作正常,除了乘法函数。由于某种原因,它会从当前位置获取文件名。我完全不知道为什么会这样,也不知道如何关闭它...google 没有帮助。
public class Calculate {
public static void main(String[] args) {
System.out.println(args[0] + " " + args[1] + " " + args[2]);
if (args.length != 3) {
System.out.println("<number1> <operator> <number2>");
} else {
final int num1 = Integer.parseInt(args[0]);
final int num2 = Integer.parseInt(args[2]);
switch (args[1]) {
case "+":
System.out.println(num1 + num2);
break;
case "-":
System.out.println(num1 - num2);
break;
case "*":
System.out.println(num1 * num2);
break;
case "/":
System.out.println(num1 / num2);
break;
}
System.out.println("\n");
}
}
}
这个和java没有关系,但是跟命令行有关,需要使用:
java Calculate 2 "*" 3
原因是*
被命令行解释为通配符:它被文件夹中的所有文件替换,幸运的是只有一个这样的。这是几乎所有(基本)shell 的默认行为。但是,如果您在单引号 ('*'
) 或双引号 ("*"
) 之间编写它,则 shell 不会 intepret 它,而是将其作为一个角色。
所以基本上发生的是您的呼叫被 cmd 替换为:
java Calculate 2 <files in the directory> 3
换句话说,java
甚至不知道您曾经使用过通配符,因为在您调用该程序之前它已被替换。
可以找到更多信息here(虽然该网站是为Linuxshell设计的,但思路普遍适用) .
编辑
正如@PatriciaShanahan 所说,您还可以将整个表达式放在引号中,例如:
java Calculate "2 * 3"
但请注意,在这种情况下,args[0]
将包含 "2 * 3"
(并且 args
的长度将为 1
,因此您无法利用shell 部分解析你的表达式),因此你需要自己将字符串细分为多个部分。而且您不会完全删除引号。
将整个计算字符串用引号括起来,然后自己拆分:
java Calculate "2 * 3"
只使用 * 进行乘法。
我正在 java 中编写最简单的计算器,它使用命令行 arguments.Everything 工作正常,除了乘法函数。由于某种原因,它会从当前位置获取文件名。我完全不知道为什么会这样,也不知道如何关闭它...google 没有帮助。
public class Calculate {
public static void main(String[] args) {
System.out.println(args[0] + " " + args[1] + " " + args[2]);
if (args.length != 3) {
System.out.println("<number1> <operator> <number2>");
} else {
final int num1 = Integer.parseInt(args[0]);
final int num2 = Integer.parseInt(args[2]);
switch (args[1]) {
case "+":
System.out.println(num1 + num2);
break;
case "-":
System.out.println(num1 - num2);
break;
case "*":
System.out.println(num1 * num2);
break;
case "/":
System.out.println(num1 / num2);
break;
}
System.out.println("\n");
}
}
}
这个和java没有关系,但是跟命令行有关,需要使用:
java Calculate 2 "*" 3
原因是*
被命令行解释为通配符:它被文件夹中的所有文件替换,幸运的是只有一个这样的。这是几乎所有(基本)shell 的默认行为。但是,如果您在单引号 ('*'
) 或双引号 ("*"
) 之间编写它,则 shell 不会 intepret 它,而是将其作为一个角色。
所以基本上发生的是您的呼叫被 cmd 替换为:
java Calculate 2 <files in the directory> 3
换句话说,java
甚至不知道您曾经使用过通配符,因为在您调用该程序之前它已被替换。
可以找到更多信息here(虽然该网站是为Linuxshell设计的,但思路普遍适用) .
编辑
正如@PatriciaShanahan 所说,您还可以将整个表达式放在引号中,例如:
java Calculate "2 * 3"
但请注意,在这种情况下,args[0]
将包含 "2 * 3"
(并且 args
的长度将为 1
,因此您无法利用shell 部分解析你的表达式),因此你需要自己将字符串细分为多个部分。而且您不会完全删除引号。
将整个计算字符串用引号括起来,然后自己拆分:
java Calculate "2 * 3"
只使用 * 进行乘法。