CCF-命令列選項-Java
阿新 • • 發佈:2018-12-16
求改進
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); } }