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的长度看你?我不想使用引号。
答案 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字段。它将打印出来,然后另一个循环将捕获并打印其余的! :)