java - 命令行参数问题

标签 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);
    }
}

我的问题是参数的长度

当我在命令行中输入此内容时:

 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/

相关文章:

vb.net 如何将带空格的字符串传递到命令行

java - NIO2 AsynchronousSocketChannel 完全使用 CompletionHandler 进行读/写

java - RxJava 中的 Pull 实现

Java将输入流转为URL

java - java中有没有更好的并行调用api的方法?

Python:如何在 optparse 中创建一个需要的选项?

excel - 如何使用 vba 的 shell() 运行带参数的 .exe?

java - 如何让 leiningen 在实现之前评估需求?

java - 如何编写带参数的苹果脚本?

python - 执行脚本时没有任何反应?