我想让这个简单的程序运转起来,但我不确定我做错了什么;我尝试制作一个新文件,看看问题是否与我的语法有关,但它仍然在发生。这是:
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
为什么没有括号的星号不起作用,即使它是一个字符串但是" +"没有括号的作品?有什么我想念的吗?
答案 0 :(得分:2)
问题与Java无关。出现此问题是因为shell会将*
字符视为文件名模式,并将其扩展为当前目录中所有文件的名称。
解决方案是逃避命令行上的*
字符 。你无法用Java来解决这个问题。
有三种方法可以作为转义(对于POSIX兼容的shell)
java test "*"
java test '*'
java test \*
可能还有其他模糊不清的方法......但上述内容应该足够了。
("*"
和'*'
之间的区别在于它们会逃避不同的shell构造。双引号只会禁用文件路径名的“globbing”。单引号也会禁用参数替换和其他内容。)
如果在命令行参数中使用 可能的字符包括:
*
,?
,[
,]
,~
,{
,}
- 用于通配,等等$
- 参数替换|
,&
,;
#
- 评论字符您应该参考shell上的教程或textboox,或者阅读您正在使用的shell的手册条目。