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);
}
}
我的问题是参数的长度
当我在命令行中输入此内容时:
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
我可以做些什么来从参数长度中排除 hi I see you 吗?我不想使用引号。
最佳答案
如果您只需将消息用引号引起来会容易得多:
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 执行此操作无论如何,所以这不应该是一个太大的问题。
关于java - 命令行参数问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19160665/