有人可以看看我的代码并告诉我什么是错的吗?

时间:2017-02-18 05:55:38

标签: java string switch-statement

我想让这个简单的程序运转起来,但我不确定我做错了什么;我尝试制作一个新文件,看看问题是否与我的语法有关,但它仍然在发生。这是:

public class test {

     public static void main(String[] args) {

     String operator = args[0];

     switch(operator) {

     case "*":
     System.out.println("Hello");
     break; 

             }
         }
     }

我首先尝试在终端上运行此程序

  $ javac test.java

然后实际运行程序和参数

  $ java test *
之后我什么都没得到,有什么原因吗?它似乎适用于" *"替换为" +"。

我也注意到只有输入

才会有效
  $ java test "*" //notice the quotation marks

为什么没有括号的星号不起作用,即使它是一个字符串但是" +"没有括号的作品?有什么我想念的吗?

1 个答案:

答案 0 :(得分:2)

问题与Java无关。出现此问题是因为s​​hell会将*字符视为文件名模式,并将其扩展为当前目录中所有文件的名称。

解决方案是逃避命令行上的*字符 。你无法用Java来解决这个问题。

有三种方法可以作为转义(对于POSIX兼容的shell)

    java test "*"
    java test '*'
    java test \*

可能还有其他模糊不清的方法......但上述内容应该足够了。

"*"'*'之间的区别在于它们会逃避不同的shell构造。双引号只会禁用文件路径名的“globbing”。单引号也会禁用参数替换和其他内容。)

如果在命令行参数中使用 可能的字符包括:

  • *?[]~{} - 用于通配,等等
  • $ - 参数替换
  • 贝壳符号|&;
  • # - 评论字符
  • 反引号字符。

您应该参考shell上的教程或textboox,或者阅读您正在使用的shell的手册条目。