传递给 Java main() 的命令行参数中的引号

Posted

技术标签:

【中文标题】传递给 Java main() 的命令行参数中的引号【英文标题】:Quotes in command line arguments passed to Java main() 【发布时间】:2011-04-26 23:41:25 【问题描述】:

我使用以下命令行运行 Java 程序(编辑:在 NetBeans 6.8 项目属性中)

toto has:"tutu titi"

args 是一个由 2 个字符串组成的数组

toto
has:tutu titi

我希望(确实是两个参数,第二个)args[1]

has:"tutu titi"

我该怎么做?

编辑:我已经尝试在 Netbeans 项目属性的“参数”行中用反斜杠转义引号,但我得到了 args[1]

has:\tutu titi\

【问题讨论】:

【参考方案1】:

这已被 netbeans 识别为a bug that won't be fixed!

【讨论】:

您是否有任何链接可以证实这一事实?如果您可以将这些添加到您的答案中,它将使其更具相关性。 我认为这是链接 [link]netbeans.org/bugzilla/show_bug.cgi?id=191254【参考方案2】:

如果从 NetBeans (7.1.2) 配置/参数对话框字段添加,单引号外部和转义双引号内部对我有用,例如:

my argument

【讨论】:

【参考方案3】:

我在 NetBeans 中遇到过类似的问题并找到了解决方案:

在您的 private.properties 中编辑/添加属性“application.args”:

application.args='has:""tutu titi""'

单引号标记您的“参数”,两个双引号定义一个“双引号”。

【讨论】:

【参考方案4】:

使用

toto "has:\"tutu titi\""

【讨论】:

在 shell 中,has:"tutu titi" 已被视为单个参数。无需在周围添加额外的引号。 @rds: 你已经转义了引号。【参考方案5】:

这真的取决于你的外壳。你还没有说你使用的是什么操作系统。例如,在 Windows 上这将起作用:

java Test toto "has:\"tutu titi\""

我相信同样的事情也适用于 bash。

但是,如果您问的是 在 Java 中 可以做什么来解决这个问题:没有。 shell 将在调用进程之前解析命令行,您无法撤消该解析。

【讨论】:

以上是关于传递给 Java main() 的命令行参数中的引号的主要内容,如果未能解决你的问题,请参考以下文章

Java命令行传参

Java中eclipse与命令行向main函数传递参数

main中的argv和argc

Maven:如何从命令行传递参数运行 .java 文件

java基础——参数的应用

参数传递策略 - 环境变量与命令行