-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCommandLineArguments.java
More file actions
121 lines (113 loc) · 3.96 KB
/
Copy pathCommandLineArguments.java
File metadata and controls
121 lines (113 loc) · 3.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
package Phase2_MethodsArraysStrings.Methods;
/**
* Command-Line Arguments
* ----------------------
* When you launch a Java program, anything you type after the class name on the
* command line is passed to `main` as a String array:
* <p>
*
* public static void main(String[] args)
* <p>
*
* Each whitespace-separated token becomes one element of `args`. Arguments are
* ALWAYS Strings - you must parse them yourself if you need numbers.
* <p>
*
* Running This File
* -----------------
* Compile first:
* javac src/Basics/Methods/CommandLineArguments.java
* <p>
*
* Then run (from the src directory) with whatever arguments you want:
* cd src
* java Basics.Methods.CommandLineArguments alpha beta 42
* <p>
*
* Or, single-file mode (Java 11+):
* java src/Basics/Methods/CommandLineArguments.java alpha beta 42
* <p>
*
* In IntelliJ - right-click -> "Modify Run Configuration..." -> "Program
* arguments" field. List tokens separated by spaces. Quote tokens that contain
* spaces: "Hello World".
* <p>
*
* Things To Know
* --------------
* - args is NEVER null. If no arguments are passed, args.length == 0.
* - The PROGRAM NAME (the class) is NOT in args - that is a C/C++ convention.
* args[0] is the FIRST user argument.
* - Quote any argument that contains spaces: "Hello World".
* - Standard input is separate: command-line args are not the same as Scanner.
* <p>
*
* Demo
* ----
* This program echoes each argument, then sums any that parse as integers.
*/
public class CommandLineArguments {
public static void main(String[] args) {
System.out.println("You passed " + args.length + " argument(s).");
// --- 1) Echo each argument with its index ---
for (int i = 0; i < args.length; i++) {
System.out.println(" args[" + i + "] = \"" + args[i] + "\"");
}
// --- 2) Sum any arguments that parse as integers; ignore the rest ---
int total = 0;
int counted = 0;
for (String token : args) {
try {
total += Integer.parseInt(token);
counted++;
} catch (NumberFormatException ignore) {
// not an integer - skip
}
}
System.out.println("Sum of " + counted + " integer argument(s) = " + total);
// --- 3) Simple "flag" parsing pattern ---
boolean verbose = false;
String name = "world";
for (int i = 0; i < args.length; i++) {
switch (args[i]) {
case "-v", "--verbose" -> verbose = true;
case "--name" -> {
if (i + 1 < args.length) {
name = args[++i]; // consume the next token
} else {
System.err.println("--name requires a value");
}
}
default -> { /* ignored in this simple example */ }
}
}
System.out.println("verbose = " + verbose + ", name = " + name);
if (verbose) {
System.out.println("(verbose mode is on)");
}
// SAMPLE RUNS
//
// > java Basics.Methods.CommandLineArguments
// You passed 0 argument(s).
// Sum of 0 integer argument(s) = 0
// verbose = false, name = world
//
// > java Basics.Methods.CommandLineArguments alpha 10 20 beta
// You passed 4 argument(s).
// args[0] = "alpha"
// args[1] = "10"
// args[2] = "20"
// args[3] = "beta"
// Sum of 2 integer argument(s) = 30
// verbose = false, name = world
//
// > java Basics.Methods.CommandLineArguments --verbose --name Deepak
// You passed 3 argument(s).
// args[0] = "--verbose"
// args[1] = "--name"
// args[2] = "Deepak"
// Sum of 0 integer argument(s) = 0
// verbose = true, name = Deepak
// (verbose mode is on)
}
}