Below given examples are for demonstrating how the argument-parser library can be used in various scenarios. Each of the examples will have these:
Note: To run the demo driver program, dependency jars must be in the classpath
. I used below command to include the jars in classpath
:
bash$ export CLASSPATH=.:~/.m2/repository/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25.jar:~/.m2/repository/com/github/easy-develop/core-utils/1.0.0/core-utils-1.0.0.jar:~/.m2/repository/org/slf4j/slf4j-simple/1.7.25/slf4j-simple-1.7.25.jar
bash$
You can include the jars in whatever way suits you.
The usage expression is:
-m minute -s seconds
Data class is:
package com.easy.argparse.demo;
public class ArgumentData {
private int minute;
private int seconds;
public int getMinute() {
return minute;
}
public void setMinute(int minute) {
this.minute = minute;
}
public int getSeconds() {
return seconds;
}
public void setSeconds(int seconds) {
this.seconds = seconds;
}
}
The demo driver program is:
package com.easy.argparse.demo;
import com.easy.argparse.ArgumentParser;
public class ArgParserDemo {
public static void main(String[] args) {
String usageExpression = "-m minute -s seconds";
ArgumentParser argParser = new ArgumentParser(usageExpression, ArgumentData.class);
ArgumentData argData = (ArgumentData) argParser.parse(args);
System.out.println("Minute: " + argData.getMinute() + ", Seconds: " + argData.getSeconds());
}
}
And the console output is:
bash$ java com.easy.argparse.demo.ArgParserDemo -m 30 -s 45
Minute: 30, Seconds: 45
The optional arguments can be specified within square brackets in the usage expression. Here is the usage expression:
-m minute [ -s seconds ]
The seconds
is an optional argument in this usage expression
The data class is:
package com.easy.argparse.demo;
public class ArgumentData {
private int minute;
private int seconds;
public int getMinute() {
return minute;
}
public void setMinute(int minute) {
this.minute = minute;
}
public int getSeconds() {
return seconds;
}
public void setSeconds(int seconds) {
this.seconds = seconds;
}
}
The demo driver program is:
package com.easy.argparse.demo;
import com.easy.argparse.ArgumentParser;
public class ArgParserDemo {
public static void main(String[] args) {
String usageExpression = "-m minute -s seconds";
ArgumentParser argParser = new ArgumentParser(usageExpression, ArgumentData.class);
ArgumentData argData = (ArgumentData) argParser.parse(args);
System.out.println("Minute: " + argData.getMinute() + ", Seconds: " + argData.getSeconds());
}
}
And the console output is:
bash$ java com.easy.argparse.demo.ArgParserDemo -m 30
Minute: 30, Seconds: 0
bash$ java com.easy.argparse.demo.ArgParserDemo -m 30 -s 20
Minute: 30, Seconds: 20
Note: The value of seconds
takes default value for int
(i.e. 0
) when not specified in command line arguments
The options to be specified in command line arguments can have aliases defined through the usage expression. Here is the usage expression:
-m|--min minute -s seconds
This means that minute
can be specified through option -m
or --min
The data class is:
package com.easy.argparse.demo;
public class ArgumentData {
private int minute;
private int seconds;
public int getMinute() {
return minute;
}
public void setMinute(int minute) {
this.minute = minute;
}
public int getSeconds() {
return seconds;
}
public void setSeconds(int seconds) {
this.seconds = seconds;
}
}
The demo driver program is:
package com.easy.argparse.demo;
import com.easy.argparse.ArgumentParser;
public class ArgParserDemo {
public static void main(String[] args) {
String usageExpression = "-m minute [ -s seconds ]";
ArgumentParser argParser = new ArgumentParser(usageExpression, ArgumentData.class);
ArgumentData argData = (ArgumentData) argParser.parse(args);
System.out.println("Minute: " + argData.getMinute() + ", Seconds: " + argData.getSeconds());
}
}
And the console output is:
bash$ java com.easy.argparse.demo.ArgParserDemo -s 20 -m 45
Minute: 45, Seconds: 20
bash$ java com.easy.argparse.demo.ArgParserDemo --min 45 -s 20
Minute: 45, Seconds: 20
Note that output with -m
is same as that with --min
. It should also be noted that values in command line arguments need not be as per order given in usage expression
A value in the command line argument can be specified to be an array. Here is the usage expression:
-u userIds
The data class is:
package com.easy.argparse.demo;
public class ArgumentData {
private int[] userIds;
public int[] getUserIds() {
return userIds;
}
public void setUserIds(int[] userIds) {
this.userIds = userIds;
}
}
The demo driver program is:
package com.easy.argparse.demo;
import com.easy.argparse.ArgumentParser;
public class ArgParserDemo {
public static void main(String[] args) {
String usageExpression = "-u userIds";
ArgumentParser argParser = new ArgumentParser(usageExpression, ArgumentData.class);
ArgumentData argData = (ArgumentData) argParser.parse(args);
System.out.println("Specified users are given below:");
for(int id : argData.getUserIds()){
System.out.println("User ID = [" + id + "]");
}
}
}
And the console output is:
bash$ java com.easy.argparse.demo.ArgParserDemo -u "1818, 9856, 7812"
Specified users are given below:
User ID = [1818]
User ID = [9856]
User ID = [7812]
It is to note that if not specified otherwise, elements of the array are supposed to be separated by ,
and whitespace around the array elements are automatically removed
We can specify the array elements to be separated by some delimiter other than ,
. Here is the usage expression:
-u userIds
The data class is:
package com.easy.argparse.demo;
public class ArgumentData {
private int[] userIds;
public int[] getUserIds() {
return userIds;
}
public void setUserIds(int[] userIds) {
this.userIds = userIds;
}
}
The demo driver program is:
package com.easy.argparse.demo;
import com.easy.argparse.ArgumentParser;
public class ArgParserDemo {
public static void main(String[] args) {
String usageExpression = "-u userIds";
ArgumentParser argParser = new ArgumentParser(usageExpression, ArgumentData.class, "|");
ArgumentData argData = (ArgumentData) argParser.parse(args);
System.out.println("Specified users are given below:");
for(int id : argData.getUserIds()){
System.out.println("User ID = [" + id + "]");
}
}
}
And the console output is:
bash$ java com.easy.argparse.demo.ArgParserDemo -u "1818 | 9856 | 7812"
Specified users are given below:
User ID = [1818]
User ID = [9856]
User ID = [7812]