【发布时间】:2011-03-16 14:33:57
【问题描述】:
类似于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 扩展,但它必须足够聪明以处理单引号和双引号以及字符串中可能存在的任何转义。有人知道在这些条件下解析字符串的方法吗?
注意:我确实不需要进行命令行解析,我已经在使用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 数组而不是自己去解析它吗?
-
我已经更新了我的问题,以描述为什么我需要解析字符串以及这与命令行解析有何不同。
-
我认为它与命令行解析没有什么不同,请参阅我的答案的附录,了解我过去如何处理与此非常相似的事情。
-
刚刚添加了一个您可能会觉得有用的简短答案 - 现在您已经为您的问题添加了一些解释:-)
标签: java parsing command-line-arguments