Подобно этой теме для C # , мне нужно разделить строку, содержащую аргументы командной строки, для моей программы, чтобы я мог позволить пользователям легко запускать несколько команд.Например, у меня может быть следующая строка:
-p /path -d "here's my description" --verbose other args
Учитывая вышесказанное, Java обычно передает следующее в main:
Array[0] = -p
Array[1] = /path
Array[2] = -d
Array[3] = here's my description
Array[4] = --verbose
Array[5] = other
Array[6] = args
Мне не нужно беспокоиться олюбое расширение оболочки, но оно должно быть достаточно умным, чтобы обрабатывать одинарные и двойные кавычки и любые экранирования, которые могут присутствовать в строке.Кто-нибудь знает способ синтаксического анализа строки, как оболочка при этих условиях?
ПРИМЕЧАНИЕ : мне НЕ необходимо выполнить анализ командной строки, я 'Я уже использую joptsimple , чтобы сделать это.Скорее, я хочу, чтобы моя программа легко создавалась для сценариев.Например, я хочу, чтобы пользователь мог размещать в одном файле набор команд, каждая из которых будет действительна в командной строке.Например, они могут ввести в файл следующее:
--addUser admin --password Admin --roles administrator,editor,reviewer,auditor
--addUser editor --password Editor --roles editor
--addUser reviewer --password Reviewer --roles reviewer
--addUser auditor --password Auditor --roles auditor
Затем пользователь запустит мой инструмент администратора следующим образом:
adminTool --script /path/to/above/file
main()
найдет --script
и перебираем различные строки в файле, разбивая каждую строку на массив, который я затем запускаю в экземпляре joptsimple, который затем передается в мой драйвер приложения.
joptsimple поставляется с Parser, которыйимеет метод разбора , но поддерживает только массив String
.Точно так же конструкторы GetOpt также требуют String[]
- следовательно, необходим синтаксический анализатор.