【问题标题】:Java command line arguments. Using * as an argument for multiplication [duplicate]Java 命令行参数。使用 * 作为乘法的参数[重复]
【发布时间】:2011-11-18 11:01:19
【问题描述】:

我正在尝试从命令行运行 java 计算器应用程序。参数如下: operatoroperand1operand2。我可以成功运行 + 和 - 的java程序。
例如
java 计算 + 2 4
java 计算 - 10 4

但是当我尝试运行时
java * 2 5

System.out.println(args[0]);
System.out.println(args[1]);
System.out.println(args[2]);

给出输出:
.classpath
.project
.settings

我通过反复试验发现使用单引号('*')解决了我的问题。 所以我现在有两个问题。
1. 使用单引号是正确的做法吗? (java calc '*' 2 5 )
2、java命令行中的*是什么意思? (我试图在互联网上找到这个但没有找到太多帮助)

谢谢, 单位

【问题讨论】:

  • 在网上搜索“文件名扩展”。是的,单引号星号。

标签: java command-line-arguments


【解决方案1】:

这不是 Java,而是您正在使用的 shell(cmd,如果您在 Windows 上)将* 解释为“当前目录中的所有文件和文件夹”。

所以当你写的时候:

java calc * 2 5

您实际上会为您的程序提供以下参数:

java calc file_1 file_2 ... file_n 2 5

其中file_1 ... file_n 是当前目录中的所有文件(和文件夹)。

如果您不希望您的 shell 将 * 解释为您需要(如您所见)引用该参数的所有文件。

【讨论】:

  • 应该是 " (双引号) 而不是 ' (单引号)。
  • @reader_1000:很好,因为这是一个“仅限 Windows”的问题! (其他 shell 需要其他字符来引用或转义它。例如 sh 使用 \*。)
  • 很抱歉没有提及我使用的操作系统。我正在使用窗户。在 windows cmd 中使用双引号 ( " ) 仍然给我同样的错误。使用单引号 ( ' ) 虽然效果很好。正如@dacwe 正确指出的那样,不同平台的转义序列是不同的。谢谢大家的回答和 cmets :)
【解决方案2】:

如果你引用你的命令参数,shell 不会将它们扩展为文件名。 '*' 对 java 没有特殊意义,它是处理这个输入的 shell。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-29
    • 1970-01-01
    相关资源
    最近更新 更多