Java 命令行程序中的处理选项
这更多的是一个(新手)一般编程问题,而不是java特有的挑战。这是我的目标语言,如果它起作用的话 你如何理智地处理一个在运行过程中可能有多种组合选项的程序 例如,假设我有一个音乐播放器命令行应用程序,可以按如下方式运行:Java 命令行程序中的处理选项,java,Java,这更多的是一个(新手)一般编程问题,而不是java特有的挑战。这是我的目标语言,如果它起作用的话 你如何理智地处理一个在运行过程中可能有多种组合选项的程序 例如,假设我有一个音乐播放器命令行应用程序,可以按如下方式运行:muzak-s-v-a-I my_music_dir *-s:洗牌 *-r:重播一次 *-v:反向播放列表 *-a:全部重播(如果-a和-r同时处于活动状态,-a覆盖) *-i:忽略以前播放的(与重放文件的机会相同) 在编写方法时,如何跟踪所有可能的选项?例如,muzak-s
muzak-s-v-a-I my_music_dir
*-s:洗牌
*-r:重播一次
*-v:反向播放列表
*-a:全部重播(如果-a和-r同时处于活动状态,-a覆盖)
*-i:忽略以前播放的(与重放文件的机会相同)
在编写方法时,如何跟踪所有可能的选项?例如,
muzak-s-v my_music_dir
产生的播放列表与muzak-v-s my_music_dir
产生的播放列表不同,播放顺序相同。如果不想重新发明方向盘,请使用
你可以做一些相当简单的事情。我将获取命令行参数数组,检查它是否包含每个标志,并相应地设置一个布尔值 之后,我可以使用布尔运算,使用
if
条件处理每个特殊场景
public static void main(String[] args) {
boolean replay = false;
boolean replayAll = false;
if (Arrays.asList(args).contains("-r")) {
replay = true;
}
if (Arrays.asList(args).contains("-a")) {
replayAll = true;
}
//handle special scenarios at the end
if (replay && replayAll) {
replay = false;
//keep only replayAll true
}
System.out.println(replay);
System.out.println(replayAll);
}
因此,如果执行javamusic-r-a
,结果将是:
重复:false
repeatAll:true
我建议您使用switch,因为这种方法很干净,并且可以很好地扩展(新选项)
公共静态void main(字符串[]args){
选项=新选项()
至于其余的代码,我建议您创建一个类选项:
class Options{
boolean replay = false;
boolean replayAll = false;
// getters and setters
// other methods holding flag combinations, like:
public boolean replayNone(){
return !replay && ! replayAll;
}
}
for(String arg: args){ // iterate over all options
if(arg == null) continue; // switch does not like nulls
switch(arg){ // since JDK7 you can switch over Strings
case "-r":
options.setReplay(true); break;
case "-a" :
options.setReplayAll(true); break;
default:
throw new ParseException("Unknown option: "+ arg)
}
}
.... // rest of your code
}
class Options{
boolean replay = false;
boolean replayAll = false;
// getters and setters
// other methods holding flag combinations, like:
public boolean replayNone(){
return !replay && ! replayAll;
}
}