我有这样的cmd:
java Test -p 127.0.0.1:8080 -d D:\Desktop\temp.exe -o mingw -s 1024 -t 2000
我想用-p
,-d
或-s
(排除-p
, -d
,-s
本身)获取 args,并丢弃其他 args。
我尝试了几个小时但没有结果,有没有人可以帮助我?
我尝试了arg[i]和arg[i+1]的方式,但是如果args是这样的:-p -d xxx,用户不输入-p值,这个解决方案将不起作用并导致问题。
我有这样的cmd:
java Test -p 127.0.0.1:8080 -d D:\Desktop\temp.exe -o mingw -s 1024 -t 2000
我想用-p
,-d
或-s
(排除-p
, -d
,-s
本身)获取 args,并丢弃其他 args。
我尝试了几个小时但没有结果,有没有人可以帮助我?
我尝试了arg[i]和arg[i+1]的方式,但是如果args是这样的:-p -d xxx,用户不输入-p值,这个解决方案将不起作用并导致问题。
使用这个正则表达式-(\w) ([\w!@#$%^&*():\\/.]+)
group[1]
包含标志,group[2]
包含参数
如果您的所有选项都采用相同的形式-x value
,那么您可以将您的 args 数组拆分为以下形式的组-d 127.0.0.1:8080
,-d D:...
for(int i=0; i < args.length; i+=2){
//group args
}
for each group in groups:
if group[0].equals("-d"){
//do something
}
}
或者,只需查看 Java 中现有的 OptionParser 库。如何在 Java 中解析命令行参数?
怎么样...
for(int i = 0; i < args.length; i+=2) {
if(args[i].equals("-p") {
//args[i+1] is the value
}
...
}
它不使用正则表达式,耶 :)
此解决方案将您的 args 组装到地图中:
public static void main(String[] args) {
final Map<Character, String> am = new HashMap<Character, String>();
for (int i = 0; i+1 < args.length; i++)
if (args[i].matches("-[pds]") && !args[i+1].startsWith("-"))
am.put(args[i].charAt(1), args[++i]);
System.out.println(am);
}
尽量不要创造一个大的表达,而是各种小的表达。例如,匹配 -p 部分的表达式是:(-p ?(.*?)
未经测试)。
你不需要正则表达式,因为参数来自一个数组,所以你只需循环它:
public static void main(String[] args) {
Map<String, String> argsMap = new HashMap<String, String>();
int i = 0;
while(i < args.length - 1 && args[i].startsWith("-")) {
argsMap.put(args[i].substring(1), args[++i]);
}
System.out.println("-p arg was " + argsMap.get("p"));
// etc.
}