В основном в командной строке мои аргументы будут чем-то вроде
-app app1 app2 app3 -env env1 env2 //the number can go higher then 3 and 2
где у меня есть перечисление для приложений и перечисление для envs
Я знаю, что самый простой подход - использовать библиотеки и работать с ними, но это не вариант для меня. Я попытался взять то, что я прочитал из аргумента командной строки Java splitting
и от передачи аргумента командной строки с пробелами и соединить его, но это не сработало
Я думаю, что мне нужно сделать, это раскол, когда я вижу "-app", затем добавьте, что после этого, в список, пока не увижу "-env", поэтому я хотел бы разделить на "-". Я никогда не разделял аргументы командной строки или массивы. Это то, что я пытаюсь сделать до сих пор. (Я взял часть if, потому что знаю, что часть работает и не связана с этим)
public static void main(String[] args)
{
boolean sawApp = false;
boolean sawEnv = false;
List<String> appList = new ArrayList();
List<String> envList = new ArrayList();
else if(args.length > 0)
{
for(int i = 0; i < args.length; i ++)
{
if(args.equals("-app"))
{
sawApp = true;
String[] apps = //this is where I am stuck
}
else if(args.equals("-env")
{
sawEnv = true;
String[] env = //this is where I am stuck
}
}
}
Затем после того, как он разбирает их, ему необходимо взять их и запустить в этот метод, который у меня есть в верхней части кода
public static Application chooseAppTest(String[] args)
{
Application application = null;
switch (application)
{
case ACCOUNTINVENTORY:
Если вы можете получить массив, помещенный в полную строку:
String args = "-app app1 app2 app3 -env ev1 env2";
String[] splitDashes = args.split("-");
List<String> appList = new ArrayList();
List<String> envList = new ArrayList();
for(String split : splitDashes){
String[] splitSpaces = split.split(" ");
if (splitSpaces[0].equals("app"))
{
for(String s : splitSpaces){
if(!s.equals("app"))
appList.add(s);
}
}
else if(splitSpaces[0].equals("env"))
{
for(String s : splitSpaces){
if(!s.equals("env"))
envList.add(s);
}
}
}
Хорошо, я наконец придумал решение для этого, предполагая, что -app
всегда будет первым. Это для массива String [] args:
public void DoSomething(){
String[] args = {"-app", "app1", "app2", "app3", "app4", "app5", "-env", "env1", "env2", "env3", "env4"};
List<String> appList = new ArrayList();
List<String> envList = new ArrayList();
int indexOfApp = -1;
int indexOfEnv = -1;
for(int i = 0; i<args.length; i++){
if(args[i].equals("-app")){
indexOfApp = i;
}else if(args[i].equals("-env")){
indexOfEnv = i;
}
}
int countOfApp = -1;
int countOfEnv = -1;
if(indexOfApp != -1 && indexOfEnv != -1){
countOfApp = indexOfEnv - 1;
countOfEnv = args.length - (indexOfEnv + 1);
}
System.out.println(countOfApp);
System.out.println(countOfEnv);
for(int appIndex = indexOfApp; appIndex < countOfApp; appIndex++){
appList.add(args[appIndex]);
}
for(int envIndex = indexOfEnv + 1; envIndex < args.length; envIndex++){
envList.add(args[envIndex]);
}
Assert.assertEquals(5, appList.size());
Assert.assertEquals(4, envList.size());
}
Я бы использовал args4j. Любая попытка "правильно" проанализировать аргументы командной строки вручную - это упражнение в бесполезности и переосмыслении колес.