Java 有人能看看我的代码并告诉我什么';怎么了?

Java 有人能看看我的代码并告诉我什么';怎么了?,java,string,switch-statement,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;

我试图让这个简单的程序工作,但我不确定我做错了什么;我试着创建一个新文件,看看问题是否出在我的语法上,但它仍然在发生。这是:

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无关。出现此问题是因为shell将
*
字符视为文件名模式,并将其扩展到当前目录中所有文件的名称

解决方案是在命令行中转义
*
字符。在Java中,您无法解决这个问题


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

可能还有其他一些模糊的方法可以做到这一点。。。。但上述内容应该足够了

“*”
“*”
之间的区别在于它们转义了不同的shell构造。双引号仅禁用文件路径名的“globbing”。单引号还禁用参数替换和其他功能。)

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

  • *
    [
    ]
    ~
    {
    }
    -用于全局搜索等
  • $
    -参数替换
  • 外壳符号
  • #
    -注释字符
  • 反引号字符

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

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

解决方案是在命令行中转义
*
字符。在Java中,您无法解决这个问题


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

可能还有其他一些模糊的方法可以做到这一点。。。。但上述内容应该足够了

“*”
“*”
之间的区别在于它们转义了不同的shell构造。双引号仅禁用文件路径名的“globbing”。单引号还禁用参数替换和其他功能。)

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

  • *
    [
    ]
    ~
    {
    }
    -用于全局搜索等
  • $
    -参数替换
  • 外壳符号
  • #
    -注释字符
  • 反引号字符

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

。括号中的引号是指引号吗?在切换之前打印
操作符的值可以帮助您了解发生了什么。(埃利奥特的评论)@River是的,我指的是星号,哎呀。@asterisks<代码>*
。括号是指引号吗?在切换之前打印
运算符的值可以帮助您了解发生了什么。(埃利奥特的评论)@River是的,我指的是星号,哎呀。@asterisks<代码>*
你说的逃逸是什么意思?如中所示,选择另一个符号来代替星号?转义*是什么意思?如中所示,选择另一个符号替换星号?
    java test "*"
    java test '*'
    java test \*