类似于 this thread for C# ,我需要将一个包含命令行参数的字符串拆分到我的程序中,这样我就可以让用户轻松运行多个命令。例如,我可能有以下字符串:
-p /path -d "here's my description" --verbose other args
鉴于上述情况,Java 通常会将以下内容传递给 main:
Array[0] = -p
Array[1] = /path
Array[2] = -d
Array[3] = here's my description
Array[4] = --verbose
Array[5] = other
Array[6] = args
我不需要担心任何 shell 扩展,但它必须足够聪明以处理单引号和双引号以及字符串中可能存在的任何转义。有人知道在这些条件下解析字符串的方法吗?
注意:我确实NOT需要做命令行解析,我已经在使用joptsimple要做到这一点。相反,我想让我的程序易于编写脚本。例如,我希望用户能够在单个文件中放置一组命令,每个命令在命令行上都是有效的。例如,他们可能会在文件中键入以下内容:
--addUser admin --password Admin --roles administrator,editor,reviewer,auditor
--addUser editor --password Editor --roles editor
--addUser reviewer --password Reviewer --roles reviewer
--addUser auditor --password Auditor --roles auditor
然后用户将按如下方式运行我的管理工具:
adminTool --script /path/to/above/file
main()
然后将找到 --script
选项并遍历文件中的不同行,将每一行拆分为一个数组,然后我会回火在一个 joptsimple 实例中,然后将其传递到我的应用程序驱动程序中。
joptsimple 带有一个解析器,它有一个 parse method , 但它只支持 String
数组。同样,GetOpt构造函数还需要一个 String[]
——因此需要一个解析器。
最佳答案
这是一个非常简单的替代方法,可以将文件中的文本行拆分为参数 vector ,以便您可以将其输入到选项解析器中:
这是解决方案:
public static void main(String[] args) {
String myArgs[] = Commandline.translateCommandline("-a hello -b world -c \"Hello world\"");
for (String arg:myArgs)
System.out.println(arg);
}
魔法类Commandline
是 ant 的一部分。因此,您要么必须将 ant 放在类路径中,要么只使用 Commandline 类,因为使用的方法是静态的。
关于java - 在 Java 中将包含命令行参数的字符串拆分为 String[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3259143/