【问题标题】:Could someone look at my code and tell me what's wrong?有人可以看看我的代码并告诉我出了什么问题吗?
【发布时间】:2017-02-18 05:55:37
【问题描述】:

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

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

为什么不带括号的星号即使是字符串也不起作用,但不带括号的“+”可以工作?有什么我遗漏的吗?

【问题讨论】:

  • 括号里的意思是引号吗?
  • 在切换之前打印operator 的值可以帮助您了解发生了什么。 (艾略特的评论)
  • @River 是的,我的意思是星号,哎呀。
  • @asterisks? * " ()

标签: java string switch-statement


【解决方案1】:

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

解决方案是在命令行转义*字符。在 Java 中没有什么可以解决这个问题。


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

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

可能还有其他晦涩难懂的方法可以做到这一点......但以上应该就足够了。

"*"'*' 之间的区别在于它们转义了不同的 shell 结构。双引号仅禁用文件路径名的“通配符”。单引号也禁用参数替换和其他操作。)

如果您在命令行参数中使用它们,可能需要转义的字符包括:

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

您应该参考有关外壳的教程或文本框,或阅读您正在使用的外壳的手册条目。

【讨论】:

  • 转义 * 是什么意思?就像选择另一个符号来代替星号一样?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-21
  • 2020-10-30
  • 2010-11-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多