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

私の問題は引数の長さです

コマンドラインでこれを入力すると:

 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

こんにちは、引数の長さから除外するために何かできますか? 引用符は使いたくありません。

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()まで行ってきたように で削除します。

これの唯一の欠点は、メッセージに実際に二重引用符が含まれている場合です。二重引用符は でエスケープする必要があります\"。ただし、とにかく実行しているシェルに対してこれを行う必要があるため、それほど問題にはなりません。

于 2013-10-03T13:42:55.063 に答える