You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
54 lines
1.6 KiB
54 lines
1.6 KiB
# Spring SimpleCommandLineArgsParser
|
|
|
|
- Author: [HuiFer](https://github.com/huifer)
|
|
- 源码阅读仓库: [SourceHot-spring](https://github.com/SourceHot/spring-framework-read)
|
|
|
|
- 类全路径: `org.springframework.core.env.SimpleCommandLineArgsParser
|
|
- 类作用: 将命令行参数解析成 `org.springframework.core.env.CommandLineArgs`
|
|
|
|
- 完整代码如下.
|
|
|
|
```java
|
|
|
|
class SimpleCommandLineArgsParser {
|
|
|
|
/**
|
|
* Parse the given {@code String} array based on the rules described {@linkplain
|
|
* SimpleCommandLineArgsParser above}, returning a fully-populated
|
|
* {@link CommandLineArgs} object.
|
|
* @param args command line arguments, typically from a {@code main()} method
|
|
*/
|
|
public CommandLineArgs parse(String... args) {
|
|
CommandLineArgs commandLineArgs = new CommandLineArgs();
|
|
for (String arg : args) {
|
|
if (arg.startsWith("--")) {
|
|
String optionText = arg.substring(2, arg.length());
|
|
String optionName;
|
|
String optionValue = null;
|
|
if (optionText.contains("=")) {
|
|
optionName = optionText.substring(0, optionText.indexOf('='));
|
|
optionValue = optionText.substring(optionText.indexOf('=') + 1, optionText.length());
|
|
}
|
|
else {
|
|
optionName = optionText;
|
|
}
|
|
if (optionName.isEmpty() || (optionValue != null && optionValue.isEmpty())) {
|
|
throw new IllegalArgumentException("Invalid argument syntax: " + arg);
|
|
}
|
|
commandLineArgs.addOptionArg(optionName, optionValue);
|
|
}
|
|
else {
|
|
commandLineArgs.addNonOptionArg(arg);
|
|
}
|
|
}
|
|
return commandLineArgs;
|
|
}
|
|
|
|
}
|
|
|
|
```
|
|
|
|
- 处理流程
|
|
1. 循环命令行参数列表
|
|
2. 去掉 `--` 和 `=` 获取参数名称和参数值放入结果集合
|