0

私は楽しみのために小さな Java アプリケーションをプログラミングしましたが、すべてうまくいきました。私の問題は、コマンド ライン パラメーターを解析するメソッドに取り組んでいたときに、もっと効率的な方法があるはずだと感じたことです。私のプログラムは受け入れます:

-l I (I は新しい下限の整数) -u I (I は新しい上限の整数) -? (使用可能なコマンドライン オプションを出力します) -v (メイン クラスの詳細出力を有効にします)

parseArgs メソッドを次のように実装しました。

private static void parseArgs(String[] arguments) {

String t = "";

for (int c = 0; c < arguments.length; c++) t += arguments[c];

if (t.contains("-")) {
    String[] params = t.split("-");
    for (int c = 0; c < params.length; c++) params[c] = params[c].trim();

    for (int c = 0; c < params.length; c++) {
    if (params[c].startsWith("?") && !docOnly) {
        docOnly = true;
        printHelp();
    }
    if (params[c].startsWith("l") && startPoint == 1) {
        try {
        startPoint = Integer.parseInt(params[c].substring(1));
        if (startPoint < 0) {
            startPoint = 0;
        }
        } catch (NumberFormatException e) {
        error = true;
        System.out.println("\tParameter Error: " + params[c]);
        }
    }
    if (params[c].startsWith("u") && endPoint == 1000) {
        try {
        endPoint = Integer.parseInt(params[c].substring(1));
        if (endPoint < 0) {
            endPoint = 1000;
        }
        } catch (NumberFormatException e) {
        error = true;
        System.out.println("\tParameter Error: " + params[c]);
        }
    }
    if (params[c].startsWith("v") && !verbose) {
        verbose = true;
    }
    }
} else {
    error = true;
    System.out.println("\tError in Parameters. Use -? for available options.");
}
}

私が言ったように、私のコードはすべて正常に動作し、それを確認したい場合はそれを見ることができます. プロかどうかにかかわらず、他のプログラマーが、変数の数とパラメーターの順序を渡し、それらを正確に解析する効率的なコードパスを持つ状況にどのように取り組むのか、私はただ興味があります. 私は自分が最高ではないことを知っているので、疑問に思っています。どの言語でも答えは大丈夫です。私は手順に興味があります。そこからもう少し学ぶために必要な言語を適応させることができます。

前もって感謝します。〜デビッド・コリンズ

4

1 に答える 1

1
String t = "";
for (int c = 0; c < arguments.length; c++) t += arguments[c];

StringBuilder代わりに使用してください。または、さらに簡単にjoin()、多くの人気のあるライブラリのいずれかによって提供されます。


if (t.contains("-")) {
    String[] params = t.split("-");

より良い:

String[] params = t.split("-");
if (params.length > 1) {

これは特定のケースでは機能しますが(引数は非負の整数です)、一般的には問題があります。-誰かが。という名前のログファイルを要求できるように、パラメータの先頭のみを探す必要がありますmy-log.txt


startPoint = Integer.parseInt(params[c].substring(1));
if (startPoint < 0) {
    startPoint = 0;
}

すべての-兆候はによって食べられたsplitので、startPoint < 0決して真実ではありません。


数値以外のデータにエラーフラグを設定し、範囲外の数値や繰り返し引数を黙って無視するのはなぜですか?

于 2013-03-18T13:57:45.390 に答える