阻止Java解析命令行参数

Use*_*er1 1 java command-line

想在Java中进行一个不会自动解析命令行上使用的参数的应用程序.目前,java要求public static void main(string[])作为入口点签名.我想要一个我自己解析的字符串.这可以完成吗?

这是一个例子: java MyProgram Hello World

我希望它能在Hello World不需要围绕该字符串的引号的情况下给我.我甚至会满足于java给我全部java MyProgram Hello World.我认为这是Java之外的东西,而且与shell有很大关系.

Bre*_*ode 6

你对shell部分是正确的.假设您使用的是Unix,那么您的Unix shell会将您的输入字符串拆分为空白,然后将每个部分作为输入到"main"的数组中的元素返回.将所有内容作为单个字符串输入的唯一方法是像这样引用它(你说你不想要):

java MyProgram 'Hello World'

如果您不想这样做,最简单的方法就是将它们重新组合成一个字符串:

public static void main(String[] args) {
    StringBuilder sb = new StringBuilder();
    for(String s : args) {
        sb.append(s);
        sb.append(" "); //some length of whitespace
    }

    String yourString = sb.toString().trim();
}
Run Code Online (Sandbox Code Playgroud)

这里真正的问题是,如果你试图避免引用并且自己重新组合输入字符串,那么你将失去每个单词之间的空白量.如果重新组合,则以下所有命令行:

java MyProgram Hello World
java MyProgram Hello    World
java MyProgram Hello                           World
Run Code Online (Sandbox Code Playgroud)

仍然会在你的程序中显示为"Hello World".

  • 在Windows上,整个命令行(至少是命令后面的位?)可供进程(`GetCommandLine`,IIRC)使用,然后由另一个OS调用解析.在UNIX上,shell解释命令行,因此进程根本无法查看它. (2认同)