命令行args问题

时间:2013-10-03 13:35:23

标签: java command-line-arguments

public static void main(String[] args)  {
    String from = "";
    String to = "";
    String subject = "";
    String body = "";
    System.out.println("number of args : " + args.length);
    for (int i = 0; i < args.length; i++) {
        if (args[i].startsWith("From:")) {
            from = args[i].substring(5);
            System.out.println("MAIL FROM: " + from);
        } else if(args[i].startsWith("To:")) {
            to = args[i].substring(2);
            System.out.println("RCPT TO: " + to);
        } else if(args[i].startsWith("Subject:")) {
            subject = args[i];
            System.out.println("SUBJECT: " + subject.substring(8));
        } else if (args[i].startsWith("Body:")) { //The rest
            for (int j = i; j < args.length; j++) {
            body += args[j];
        }
        System.out.println(body);
    }
}

我的问题是args的长度

当我在命令行输入时:

 java test To:a@a.com From:b@b.com Subject:hi  Body:hi I see you

我的输出是:

number of args : 7

我的预期输出是这样的:

number of args: 4

我能做些什么来排除你好我从args的长度看你?我不想使用引号。

2 个答案:

答案 0 :(得分:2)

如果你只是用引号包装你的信息就容易多了:

java test To:a@a.com From:b@b.com Subject:hi  Body: "hi I see you"

现在,您知道"Body:"之后的下一个参数将始终是全文。否则,如果你想保持联系:

java test To:a@a.com From:b@b.com Subject:hi  "Body:hi I see you"

同样,以"Body:"开头的参数将包含全文,但现在开头只有"Body:",所以请将substring()删除,就像你一直在做的那样

唯一的缺点是,如果您的邮件实际上包含双引号,您需要使用\"进行转义。但是,你必须为你正在执行的shell执行此操作,因此它不应该是一个很大的问题。

答案 1 :(得分:1)

对于间距,请更改:

body += args[j];

为...

body += args[j] + " ";

然后让FROM字段首先显示,在你编写的字段之前有另一个for循环,它只检查FROM字段。它将打印出来,然后另一个循环将捕获并打印其余的! :)