1. 程式人生 > >CCF-命令列選項-Java

CCF-命令列選項-Java

求改進

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class CommandSelect {

	static Scanner sc;
	static String[] output;
	static String string;
	static String temp;
	static List<String[]> list;
	static int[] letters;
	static int total;
	static String[] cmd;
	public static void main(String[] args) {
		sc = new Scanner(System.in);
		list = new ArrayList<>();
		string = sc.nextLine();
		letters = new int[26];
		//利用ascii碼來寫
		for(int i=string.length()-1;i>=0;i--) {
			if(string.charAt(i)==':') {
				letters[(int)(string.charAt(i-1))-97]=2;//2 表示帶引數
				i--;
			} else {
				letters[(int)(string.charAt(i))-97]=1; //1表示不帶引數
			}
		}
		
		total = sc.nextInt();
		
		output = new String[26]; 
		sc.nextLine();
		for(int i=0;i<total;i++) {
			temp = sc.nextLine()+" ";
			cmd = temp.split(" ");
			deal();
		}
		for(int i=0;i<list.size();i++) {
			String str = "";
			str+="Case"+(i+1)+":"+" ";
			for(int j=0;j<list.get(i).length;j++) {
				if(list.get(i)[j]!=null) {
					str+=list.get(i)[j]+" ";
				}
			}
			
			//去除字串開始和結束的空格 使其符合輸出結構
			System.out.println(str.trim());
		}
	}
	public static void deal() {
		output = new String[26];
		for(int i=1;i<cmd.length;i++) {
			String out = "";			
			if(cmd[i].charAt(0)=='-'&&cmd[i].length()==2) {
				//表示碰到了引數選項
				if(letters[(int)(cmd[i].charAt(1)-97)]==2) {
					//表示後面需要帶引數
					if(i==cmd.length-1 || ((i<cmd.length-1)&&(cmd[i+1].charAt(0)=='-'))) {
						//如果是最後一個引數選項了或者後面這一個不是引數 那麼跳出這個迴圈
						break;
					} else {
						//說明後面是有引數的  cmd[i]是引數選項	
						output[(int)(cmd[i].charAt(1)-97)] = cmd[i]+" "+cmd[i+1];
						i++; //繼續跳過這個引數  再進行判斷
					}
				} else if(letters[(int)(cmd[i].charAt(1)-97)]==1) {
					//表示後面不需要帶引數
					if((i<cmd.length-1)&&(cmd[i+1].charAt(0)!='-')) {
						//本來不需要引數  但是後面出現了引數 該行分析到這裡結束
						break;
					}
					output[(int)(cmd[i].charAt(1)-97)] = cmd[i];
				} else {
					//沒有在所給定的命令列選項中
					break;
				}
			} else {
				break;
			}
		}
		list.add(output);
	}

}