使用引号拆分字符串,重用将参数解析为main的方法

时间:2010-07-04 07:29:35

标签: java string parsing code-reuse

在我编写的小程序中,我必须解析一行用户输入。基本上需要做的是将行拆分为一个字符串数组,方法与main()的参数相同,即我正在寻找类似的东西:

String[] splitArgs(String cmdLine);

我只是想知道,如果在调用main本身之前以这种方式解析主要方法的参数,是不是可以调用那个而不是编写自己的?那么,有谁知道在哪里找到这种方法?

谢谢, 阿克塞尔

4 个答案:

答案 0 :(得分:5)

On globbing

命令行参数由shell解析;这就是为什么*通常会扩展为文件列表的原因。这称为“globbing”,它发生在程序之外,在JVM开始之前。

另见

相关问题


关于拆分字符串

至于将字符串拆分为字符串数组,最基本的选项是String.split(String regex)

这是一个非常简单的例子:

    String[] parts = "one two three".split(" ");
    for (String part : parts) {
        System.out.println("[" + part + "]");
    }

以上版画:

[one]
[two]
[three]

String的{​​{1}}参数是正则表达式。

参考


split选项

您可以使用的另一个选项是java.util.Scanner。这是遗产StringTokenizer的一个更加改进的版本。

相关问题


番石榴选项

要获得更强大的Scanner拆分功能,您可以使用例如来自番石榴的Splitter

答案 1 :(得分:4)

不,解析是由shell或系统库(在Windows上)完成的,而不是由Java完成的。您可以使用ProcessBuilder和sh -c(或Windows上的cmd)。类似的东西:

new ProcessBuilder("sh", "-c", "java Program " + cmdLine).start();

答案 2 :(得分:0)

这种解析通常由shell完成。所以你正在寻找的函数将是一个完全独立的程序的一部分,它可能是用C语言编写的。到Java VM开始运行时,参数已经被解析了。

答案 3 :(得分:0)

我刚刚通过apache commons exec找到另一种解决方法。

public static String[] splitArgsStr(String argsStr) {
    org.apache.commons.exec.CommandLine execCommandLine = new org.apache.commons.exec.CommandLine("sh");
    execCommandLine.addArguments(argsStr, false);
    return execCommandLine.getArguments();
}

最新的maven依赖是:

<dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-exec</artifactId>
        <version>1.3</version>
    </dependency>