java - 在 Java 中将包含命令行参数的字符串拆分为 String[]

标签 java parsing command-line-arguments

类似于 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);
}

魔法类Commandlineant 的一部分。因此,您要么必须将 ant 放在类路径中,要么只使用 Commandline 类,因为使用的方法是静态的。

关于java - 在 Java 中将包含命令行参数的字符串拆分为 String[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3259143/

相关文章:

java - 如何将文本文件数组中的数字添加到二维 int 数组中?

parsing - yacc/bison LALR(1) 算法如何处理 "empty"规则?

java - 带有 String[] args 的 Eclipse 命令行参数

command-line-arguments - Inno Setup IDE和ISCC/ISPP传递定义

c - 我如何使用 getopt_long 处理 c 中的参数

java - 如何使用 JSoup 从另一个元素中删除一个元素?

java - 将儒略日期转换为以毫秒为单位的时间

java - 我如何检查 Java 中 BigInteger 的每个数字?

python - 如何将 psd 工具与 python 一起使用

python - 使用 Python BeautifulSoup 解析远程网络