Similar a this thread for C#, necesito dividir una cadena que contiene los argumentos de línea de comando en mi programa para que pueda permitir a los usuarios ejecutar fácilmente varios comandos. Por ejemplo, podría tener la siguiente cadena:Dividir una cadena que contiene parámetros de línea de comandos en una cadena [] en Java
-p /path -d "here's my description" --verbose other args
Dado lo anterior, Java pasaría normalmente a lo siguiente en principal:
Array[0] = -p
Array[1] = /path
Array[2] = -d
Array[3] = here's my description
Array[4] = --verbose
Array[5] = other
Array[6] = args
No necesito que preocuparse acerca de cualquier desarrollo del forro, pero debe ser lo suficientemente inteligente como para manejar comillas simples y dobles y cualquier escape que pueda estar presente dentro de la cadena. ¿Alguien sabe de una forma de analizar la cadena como lo haría el caparazón bajo estas condiciones?
NOTA: hago NO tiene que hacer el análisis de línea de comandos, ya estoy usando joptsimple de hacer eso. Más bien, quiero que mi programa sea fácilmente programable. Por ejemplo, quiero que el usuario pueda colocar dentro de un solo archivo un conjunto de comandos que cada uno de ellos sea válido en la línea de comando. Por ejemplo, puede ser que escriba lo siguiente en un archivo:
--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
continuación, el usuario podría ejecutar mi herramienta de administración de la siguiente manera:
adminTool --script /path/to/above/file
main()
entonces encontrará la opción --script
y iterar sobre las diferentes líneas en el archivo, dividiendo cada línea en una matriz que luego volvería a disparar en una instancia joptsimple que luego pasaría a mi controlador de aplicación.
joptsimple viene con un Analizador que tiene un parse method, pero solo admite una matriz String
. Del mismo modo, los constructores GetOpt también requieren un String[]
- de ahí la necesidad de un analizador.
¿No podría simplemente usar la matriz args que se le proporcionó en main() en lugar de intentar analizarlo usted mismo? –
He actualizado mi pregunta para describir por qué necesito analizar la cadena y cómo eso es diferente del análisis de línea de comandos. –
No creo que sea diferente al análisis de línea de comandos, consulte el apéndice de mi respuesta sobre cómo me he acercado a algo muy similar a esto en el pasado. –