Форум программистов, компьютерный форум, киберфорум
Java для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
1184 / 754 / 127
Регистрация: 10.03.2012
Сообщений: 4,845

Разбор параметров командной строки

25.03.2022, 17:51. Показов 2823. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написать класс, который разбирает командную строку, переданную на вход программе. При создании объекта этого
класса, он получает набор разделителей и набор самих ключей, который допустим в командной строке. Например: "-t -r", здесь "-" это разделитель, а "t" и "r" ключи. Класс должен содержать методы: OnUsage - выводит подсказку с форматом командной строки, OnSwitch - отрабатывает команду для каждого найденного ключа, Parse - разбор командной строки
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.03.2022, 17:51
Ответы с готовыми решениями:

Ограничить вывод параметров командной строки
Здравствуйте, уважаемые джависты! У меня задача такая. Нужно вывести параметры командной строки через пробел. Но при этом нужно чтобы...

Реализация в виде консольного приложения с разбором параметров командной строки
Добрый день! У меня есть программа, написанная на языке java с помощью IntelliJ IDEA. В данной программе задействованы несколько файлов из...

Обработка параметров командной строки
Обеспечить обработку параметров командной строки для определения режима работы программы: параметр "-h" или "-help":...

8
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
25.03.2022, 18:13
Вопрос какой?
0
1184 / 754 / 127
Регистрация: 10.03.2012
Сообщений: 4,845
25.03.2022, 18:27  [ТС]
Как сделать разбор командной строки
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
25.03.2022, 20:57
Посмотреть на методы в классе стринг, выбрать нужные
0
1184 / 754 / 127
Регистрация: 10.03.2012
Сообщений: 4,845
29.03.2022, 10:21  [ТС]
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
public class ComLineParser {
    private String[] keys;          
    private String[] delimeters;
 
    public enum SwitchStatus { NoError, Error, ShowUsage };
 
    public ComLineParser(String[] keys) {
        this(keys, new String[] { "/", "-" });
    }
    public ComLineParser(String[] keys, String[] delimeters) {
        this.keys = keys;
        this.delimeters = delimeters;
    }
 
    public void OnUsage(String errorKey){
        if (errorKey != null)
            System.out.println("Command-line switch error:" + errorKey);
 
        System.out.println("формат ком.строки: имяПрограммы [-r<input-fileName>] [-w<output-fileName>]");
    System.out.println("   -?  показать Help файл");
    System.out.println("   -r  задать имя входного файла");
    System.out.println("   -w  выполнить вывод в указанный файл");
    }
    public SwitchStatus OnSwitch(String key, String keyValue) {
        System.out.println(key+"  "+keyValue);
        return SwitchStatus.NoError;
    }
 
    public Boolean Parse(String[] args) {
        SwitchStatus ss = SwitchStatus.NoError;     
 
        int argNum;
        for (argNum = 0; (ss == SwitchStatus.NoError) && (argNum < args.length); argNum++) {
 
            boolean isDelimeter = false;
            for (int n = 0; !isDelimeter && (n < delimeters.length); n++) {
                isDelimeter = args[argNum].regionMatches(0,delimeters[n], 0, 1);
            }
            
            if (isDelimeter) {
                Boolean isKey = false;
                int i;
                for (i = 0; !isKey && (i < keys.length); i++) {
                    isKey = args[argNum].toUpperCase().regionMatches(1, 
                            keys[i].toUpperCase(),0,keys[i].length());
                    if (isKey) 
            break;
                }
                if (!isKey) {
                    ss = SwitchStatus.Error;
                    break;
                } else {
                    ss = OnSwitch(keys[i].toLowerCase(), 
                         args[argNum].substring(1 + keys[i].length()));
                }
            }
            else {
                ss= SwitchStatus.Error;
                break;
            }
        }
        if (ss == SwitchStatus.ShowUsage)    
        OnUsage(null);
        if (ss == SwitchStatus.Error)        
        OnUsage((argNum == args.length) ? null : args[argNum]);
        
        return ss == SwitchStatus.NoError;
    }   
}
2
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
29.03.2022, 11:49
Цитата Сообщение от Whitecolor Посмотреть сообщение
NoError
названия констант - UPPER_CASE
Цитата Сообщение от Whitecolor Посмотреть сообщение
OnUsage
название методов - camelCase
Цитата Сообщение от Whitecolor Посмотреть сообщение
key+"  "+keyValue
В иде есть автоформаттер, в идее - ctrl+alt+l, пользуйся
Цитата Сообщение от Whitecolor Посмотреть сообщение
if (ss == SwitchStatus.ShowUsage)    
        OnUsage(null);
обычно, лучше, когда скобки есть во всех ифах, чем иначе

Ну и опять, ты спрашиваешь, что делать и игнорируешь, что тебе говорят.
Можно было исопльзовать напрмиер indexOf, или вот так
Java
1
2
3
String s = "-r asd -c zxc";
        String[] split = s.split("(?=-[a-z])");
        System.out.println(Arrays.toString(split));
0
1184 / 754 / 127
Регистрация: 10.03.2012
Сообщений: 4,845
29.03.2022, 13:31  [ТС]
Цитата Сообщение от xoraxax Посмотреть сообщение
В иде есть автоформаттер, в идее - ctrl+alt+l, пользуйся
Цитата Сообщение от xoraxax Посмотреть сообщение
обычно, лучше, когда скобки есть во всех ифах, чем иначе
Спасибо, я постараюсь учесть
0
1184 / 754 / 127
Регистрация: 10.03.2012
Сообщений: 4,845
11.04.2022, 11:45  [ТС]
Сделал улучшение программы через наследование
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
public class SimpleParser extends ComLineParserBase {
    private String inFile;
    private String outFile;
    
    public String getInFile()  { return inFile; }
    public String getOutFile() { return outFile; }
    
    public SimpleParser(){
        super(new String[]{"?", "r", "w"});
    }
    @Override
    protected void OnUsage(String errorKey){
        if (errorKey != null)
            System.out.println("Command-line switch error:" + errorKey);
 
        System.out.println("формат ком. строки: имя Программы [-r<input-fileName>] [-w<output-fileName>]");
    System.out.println("-?  показать Help файл");
    System.out.println("-r  задать имя входного файла");
    System.out.println("-w  выполнить вывод в указанный файл");
    }
    @Override
    protected SwitchStatus OnSwitch(String key, String keyValue) {
        SwitchStatus status = SwitchStatus.NoError;
        
        switch (key) {  
            case "?":  status = SwitchStatus.ShowUsage; break;
            case "r":   
                if (keyValue.length() < 1) {
                    System.out.println("Нет имени входного файла.");
                    status = SwitchStatus.Error; 
                } 
                else  inFile = keyValue;
                break;
            case "w":   
                if (keyValue.length() < 1) {
                    System.out.println("Нет имени выходного файла.");
                    status = SwitchStatus.Error; 
                } 
                else  outFile = keyValue;
                break;
            default:  status = SwitchStatus.Error; break;
        }
        return status;
    }    
}
0
1184 / 754 / 127
Регистрация: 10.03.2012
Сообщений: 4,845
12.05.2022, 13:08  [ТС]
Java
1
2
3
4
5
6
7
8
9
10
import java.util.Enumeration;
 
public class MyCounter {
 
    public static void main(String[] args) {
        SimpleParser sp=new SimpleParser();  
        sp.Parse(args);
        }             
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.05.2022, 13:08
Помогаю со студенческими работами здесь

Прочитать аргумент командной строки и добавить в него пробелы, чтобы длинна строки равнялась заданному числу
Прочитать аргумент командной строки и добавить в него пробелы так, чтобы длинна строки равнялась заданному числу. Пробелы равномерно...

Разбор параметров командной строки в /bin/sh
Подскажите пожалуйста, как реализовать в /bin/sh следующее: нужно сделать разбор параметров в скрипте, чтобы корректно обрабатывалось...

Разбор аргументов командной строки
Здравствуйте, нужно решить задачу но не знаю с его начать в командной строке вводится A.exeпробел/Uпробел/VEnter и программа должна...

Разбор аргументов командной строки
#!/usr/bin/python3.4 # -*- coding: UTF-8 -*- import sys import argparse import os import re def createParser (): ...

Консоль, разбор командной строки
#include &lt;iostream&gt; int main(int ArgumentsCount, char **Arguments) { char **p; char **l; std::cout&lt;&lt;ArgumentsCount&lt;&lt;std::endl;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru