1. Java / Говнокод #9628

    +75

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    for (i = 0; i < pArgs.length; ++i) {
        if (!(pArgs[i].equalsIgnoreCase("-startable"))) {
            continue;
        }
        // ... обработка
        return true;
    }
    
    for (i = 0; i < pArgs.length; ++i) {
        if (!(pArgs[i].equalsIgnoreCase("-isRunning"))) {
            continue;
        }
        // ... обработка
        return true;
    }
    
    for (i = 0; i < pArgs.length; ++i) {
        if (!(pArgs[i].equalsIgnoreCase("-shutdown"))) {
            continue;
        }
        // ... обработка
        return true;
    }

    из main()а жаба аппликухи. и еще три таких цикла для еще трех параметров коммандной строки.

    любимая тонкость (которая сюда не попала): на ошибки коммандной строки бросается IndexOutOfBoundsException.

    ЗЫ а че в жабе нет штатного парсера коммандной строки? как-то загадочно. хотя если задуматся и вспомнить что писали жабу юниксоиды, которые сами тридцать лет толковго штатного парсера коммандной строки сделать не могли, то становится в какой-то степени даже логично.

    Запостил: Dummy00001, 08 Марта 2012

    Комментарии (10) RSS

    • Можно их слепить вместе и Scanner'у подсунуть - но лучше от этого не будет. Ну или так на так, зависит от сложности того, что в параметрах.
      Ответить
    • Ну кагбэ есть java.util.regex, кому мало - Apache Commons CLI в зубы
      Ответить
    • В отличие от python, в java вместо батареек (http://docs.python.org/library/argparse.html#module-argparse) в комплекте идут железная руда, карта угольных и цинковых приисков и пара костылей, чтобы до всего этого дохромать.
      Ответить
    • Но-но, как раз в юниксах с парсером командной строки всё хорошо. Но жава такой энтерпрайз.
      Ответить
      • > Но-но, как раз в юниксах с парсером командной строки всё хорошо.

        где ты там нашел что оно хорошо?

        все давно хотят GNU-style параметры, а в стандартной библиотеке только getopt() (который на некоторых БСД несовсем стандартный).

        я уже со счету сбился - столько самописных парсеров видел.
        Ответить
        • > где ты там нашел что оно хорошо
          ты еще перечисли богатый выбор стандартных методов парсинга параметров в win32

          но существу - для c++ давно пользуюсь boost::program_options, хватает с избытком, да уж побогаче getopt* будет

          для джавы командная строка - не ынтерпрайзненько, а вот создать отдельный xml файл с параметрами/настройками - это как раз java-way, даже если там будет всего 2 параметра
          Ответить
          • На самом деле командная строка в джаве нужна довольно часто (например, при запуске билда или веб-сервера). Опять же часто параметры передают в виде -Dprop.name=value, и получить это дело можно через System.getProperty("prop.name"). Подход, конечно, не айс, минус разработчикам стандартной библиотеки: нормальный парсер аргументов нужен как ни крути.
            Ответить

    Добавить комментарий