与this thread for C#类似,我需要将包含命令行参数的字符串拆分到我的程序中,以便我可以允许用户轻松运行多个命令。例如,我可能有以下字符串:将包含命令行参数的字符串拆分为Java中的String []
-p /path -d "here's my description" --verbose other args
鉴于上述情况,爪哇通常会通过以下的主:
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会在这些情况下进行解析?
注意:我做不需要做的命令行解析,我已经使用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[]
- 因此需要解析器。
难道你不能只使用main()给你的args数组,而不是试图自己解析它? – 2010-07-15 19:24:36
我已经更新了我的问题来描述为什么我需要解析字符串以及它与命令行解析的区别。 – 2010-07-15 19:42:39
我不认为它与命令行解析有什么不同,请参阅我的回答的附录,以了解我过去如何处理与此类似的内容。 – 2010-07-15 19:55:20