0
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 长度吗?我不想使用引号。

4

2 回答 2

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 执行此操作,因此这应该不是什么大问题。

于 2013-10-03T13:42:55.063 回答
1

对于间距,更改:

body += args[j];

至...

body += args[j] + " ";

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

于 2013-10-03T13:46:46.513 回答