Java 当作为参数而不是类路径和目录传递时,如何使双引号(“*”)中的星号存储为字符串?
当我通过时:“*”3 5 我希望“*”存储在argv[0]中,3存储在argv[1]中,5存储在argv[2]中 但相反,它将存储 .classpath、.project、.settings、bin、src、3、5 使argv.length==7而不是3Java 当作为参数而不是类路径和目录传递时,如何使双引号(“*”)中的星号存储为字符串?,java,string,arguments,wildcard,Java,String,Arguments,Wildcard,当我通过时:“*”3 5 我希望“*”存储在argv[0]中,3存储在argv[1]中,5存储在argv[2]中 但相反,它将存储 .classpath、.project、.settings、bin、src、3、5 使argv.length==7而不是3 我知道问题发生在参数输入处。我可以通过让用户格式化参数输入来解决这个问题,但这还不够,因为输入的格式是双引号中的星号。我可以用单引号传递星号,但问题是当用双引号传递星号时(使用Eclipse>>运行配置>>参数>>“*”3)”*“将在目录中传递
我知道问题发生在参数输入处。我可以通过让用户格式化参数输入来解决这个问题,但这还不够,因为输入的格式是双引号中的星号。我可以用单引号传递星号,但问题是当用双引号传递星号时(使用Eclipse>>运行配置>>参数>>“*”3)”*“将在目录中传递,而不是用双引号传递字符串星号 如何将双引号中的星号作为字符串读入?我知道这是可以做到的,我只是想弄清楚为什么它会被作为目录读取。按照任何其他示例,双引号应该可以解决问题,但在本例中并非如此
/**
* Drives the program.
* @param argv arguments from command line
*/
public static void main(final String[] argv) {
final TableType type;
final int start;
final int stop;
for(int i=0; i<argv.length; i++){
System.out.println(argv[i]);
}
if (argv.length != 3) {
usage();
}
System.out.println(argv[0]);
type = getType(argv[0]);
start = getNumber(argv[1]);
stop = getNumber(argv[2]);
displayTable(type, start, stop);
}
/**
* Returns the TableType represented by the specified String.
* @param str the table type
* @return TableType
*/
public static TableType getType(final String str) {
final TableType type;
if (str.equals("+")) {
type = TableType.ADD;
} else if (str.equals("\"*\"")) {
type = TableType.MULT;
} else {
usage();
type = null;
}
return (type);
}
/**
*驱动程序。
*来自命令行的@param argv参数
*/
公共静态void main(最终字符串[]argv){
最终表格类型;
最后整型启动;
最后一站;
对于(int i=0;我能告诉我们您的命令行以及:您使用的是哪个操作系统/shell吗?“我可以通过让用户格式化参数输入来解决这个问题,但这是不合理的”-这怎么不合理?如果您希望用户提供命令行参数,他们必须以正确的格式、正确的转义和所有形式提供它们。通过“传入”我想您谈论的是命令行参数。在这种情况下,这实际上不是一个Java问题,而是启动Java
的shell的行为问题。可能引用星号将解决该问题。您的shell将替换为工作目录中的目录和文件。可能你能给我们看一下你的命令行吗?还有:你在使用哪个操作系统/shell?“我可以通过让用户格式化参数输入来解决这个问题,但这是不合理的”-这怎么不合理?如果您希望用户提供命令行参数,他们必须以正确的格式、正确的转义和所有形式提供它们。通过“传入”我想您谈论的是命令行参数。在这种情况下,这实际上不是一个Java问题,而是启动Java
的shell的行为问题。可能引用星号将解决该问题。您的shell将替换为工作目录中的目录和文件。可能副本