2017-02-18 176 views
0

我想讓這個簡單的程序工作,但我不知道我做錯了什麼;我試着製作一個新文件,看看問題是否出現在我的語法中,但它仍然在發生。那就是:有人可能會看我的代碼,並告訴我什麼是錯的?

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 

爲什麼星號沒有括號沒有,即使它是一個字符串,但「+」無括號工程工作?有什麼我失蹤?

+2

[Globbing](https://en.wikipedia.org/wiki/Glob_(programming))。 –

+1

括號,你的意思是引號? – River

+0

在交換機之前打印'operator'的值可以幫助您查看正在發生的事情。 (艾略特的評論) – qxz

回答

2

問題與Java無關。發生該問題是因爲s​​hell將*字符視爲文件名模式,並將其展開爲當前目錄中所有文件的名稱。

解決方法是在命令行上跳過*字符。 Java中沒有什麼能夠解決這個問題。


這裏有三種方式,將作爲逃避工作(對於POSIX兼容的shell)

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

可能有其他晦澀的方式來做到這一點....但上面的應該足夠了。

"*"'*'之間的區別是,他們逃避不同的外殼結構。雙引號僅禁用文件路徑名的「通配」。單引號也禁用參數替換和其他的東西。)

字符可能將需要進行轉義,如果你在命令行參數使用它們包括:

  • *?[]~{} - 在用於通配符等
  • $ - 參數替換
  • 殼符號|&;
  • # - 註釋字符
  • 反引號字符。

您應該在shell中引用教程或textboox,或者閱讀您正在使用的shell的手動條目。

+0

你是什麼意思逃避*?在選擇另一個符號替換星號? –

相關問題