Découper une chaîne contenant des paramètres de ligne de commande dans un String[] en Java

Similaire à ce fil de discussion pour C#, j'ai besoin de découper une chaîne contenant les arguments de ligne de commande à mon programme si je peux permettre aux utilisateurs de facilement exécuter plusieurs commandes. Par exemple, je pourrais avoir de la chaîne suivante:

-p /path -d "here's my description" --verbose other args

Compte tenu de ce qui précède, Java devrait normalement passer dans 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

Je n'ai pas besoin de vous inquiéter d'une coquille d'expansion, mais il doit être assez intelligent pour gérer les guillemets simples et doubles et les évasions qui peuvent être présents au sein de la chaîne. Quelqu'un sait d'une façon d'analyser la chaîne de la coquille serait dans ces conditions?

NOTE: je ne PAS besoin de le faire en ligne de commande de l'analyse, je suis déjà en utilisant joptsimple de le faire. Au contraire, je veux faire mon programme facilement scriptable. Par exemple, je veux que l'utilisateur soit en mesure de placer à l'intérieur d'un seul fichier un ensemble de commandes que chacun de valable sur la ligne de commande. Par exemple, tapez la ligne suivante dans un fichier:

--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

Ensuite, l'utilisateur d'exécuter mon outil d'administration comme suit:

adminTool --script /path/to/above/file

main() trouverez le --script option et itérer sur les différentes lignes dans le fichier, le fractionnement de chaque ligne dans un tableau que je puis feu à une joptsimple instance qui serait ensuite passé dans mon application pilote.

joptsimple est livré avec un Analyseur qui a un méthode d'analyse, mais il ne prend en charge que String tableau. De même, la GetOpt constructeurs exigent également un String[] -- d'où la nécessité d'un analyseur.

  • Ne pourriez-vous utiliser le tableau args donné dans main() au lieu d'essayer de l'analyser vous-même?
  • J'ai mis à jour ma question pour décrire pourquoi j'ai besoin pour analyser la chaîne et de la façon qui est différente de la ligne de commande de l'analyse.
  • Je ne pense pas que c'est toute différente de celle que la ligne de commande de l'analyse, voir l'addendum à ma réponse sur la façon dont je me suis approché quelque chose de très semblable à cela dans le passé.
  • je viens d'ajouter une courte réponse que vous pourriez trouver utiles - maintenant que vous avez ajouté quelques explanaitions à votre question 🙂