簡體   English   中英

有人可以看看我的代碼並告訴我怎么了嗎?

[英]Could someone look at my code and tell me what's wrong?

我正在嘗試使這個簡單的程序正常工作,但是我不確定自己在做什么錯。 我嘗試制作一個新文件,以查看問題是否出在我的語法上,但仍在發生。 這里是:

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

為什么沒有括號的星號即使是字符串但沒有括號的“ +”也不起作用? 我有什么想念的嗎?

問題與Java無關。 發生問題是因為外殼程序會將*字符視為文件名模式,並將其擴展為當前目錄中所有文件的名稱。

解決方法是在命令行上轉義*字符。 您無法使用Java來解決此問題。


可以使用三種方式進行轉義(對於POSIX兼容外殼)

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

可能還有其他晦澀的方法可以執行此操作.....但上述內容就足夠了。

"*"'*'之間的區別在於它們轉義了不同的外殼結構。雙引號僅禁用文件路徑名的“ globbing”。單引號還禁用參數替換等功能。)

如果在命令行參數中使用這些字符, 可能需要轉義這些字符,包括:

  • *? []~{} -用於遍歷等
  • $ -參數替換
  • 外殼符號| & ;
  • # -注釋字符
  • 反引號字符。

您應該參考外殼上的教程或textboox,或者閱讀所用外殼的手冊條目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM