2018年三月---第13次CCF考試---第三題---java版

第三題

  1. 第三題,是一個根據url格式來判斷輸入的url屬於哪一類,然後來輸出是否匹配,以及解析後的結構
  2. Django框架就是類似的URL匹配
  3. 總的來說,沒有難點,但很麻煩,因爲要考慮的因素比較多
  4. 也是花了不少時間,還沒有得到滿分
  5. 把代碼貼出來供大家參考一下
import java.util.Scanner;

public class third
{
    public static void main(String[] args)
    {
        Scanner scanner=new Scanner(System.in);
        String string=scanner.nextLine();
        String sd[]=string.split(" ");
        int sum[]=transfer(sd);
        int form_number=sum[0];
        int line_number=sum[1];

        String str_form[]=new String[form_number];
        String form_gs[]=new String[form_number];
        String form_name[]=new String[form_number];
        String str_line[]=new String[line_number];
        boolean is_file[]=new boolean[line_number]; 
        for (int i = 0; i < str_form.length; i++) {
            str_form[i]=scanner.nextLine();
            form_gs[i]=str_form[i].split(" ")[0];
            form_name[i]=str_form[i].split(" ")[1];
        }

        for (int i = 0; i < str_line.length; i++) {
            str_line[i]=scanner.nextLine();
        }

        //deal
        //處理語句循環
        for (int i = 0; i < str_line.length; i++) {
            is_file[i]=false;
            boolean ismatch[]=new boolean[form_gs.length];

            for (int j = 0; j < ismatch.length; j++) {
                ismatch[j]=true;
            }
            //分開的語句內容
            String linesp[]=str_line[i].split("/");
            for (int j = 0; j < form_gs.length; j++) {
             //分開的格式
                String each[]=form_gs[j].split("/");
                //逐個匹配 字符串的index

                //文件後綴要大於 url地址
                if (each.length>linesp.length) {
                     ismatch[j]=false;
                    continue;
                }
                for (int k = 0; k < each.length; k++) {
                //是一個固定的數字或字符串
                    if (!each[k].startsWith("<")) {
                        //不相等 匹配下一個
                    if(!linesp[k].equalsIgnoreCase(each[k])){
                        ismatch[j]=false;
                        break;
                    }
                }
                    //是某個類型
                    else {
                        //
                         String type=findType(each[k]);
                         //如果有文件類型地址
                         if (type.equalsIgnoreCase("path")) {
                             is_file[i]=true;
                             if (linesp.length>each.length) {
                                 continue;
                            }
                        }
                         if (each.length!=linesp.length) {
                            ismatch[j]=false;
                            continue;
                        }
                        //是否匹配
                         boolean is_equal=is_equal(linesp[k], type);
                        if (is_equal) {
                        }
                        //類型不匹配
                        else {
                            ismatch[j]=false;
                            break;
                        }
                    }
            }
            }
            //out  
            boolean is_404=true;
            for (int j = 0; j < form_gs.length; j++) {
                if (ismatch[j]==true) {
                    System.out.print(form_name[j]+" ");
                    //文件
                    if (is_file[i]) {
                        String each[]=form_gs[j].split("/");
                        for (int j2 =2; j2 < linesp.length; j2++) {
                            if (j2>=each.length) {
                                System.out.print("/"+linesp[j2]);
                            }
                            else if (j2>=each.length-1) {
                                System.out.print(linesp[j2]);

                            }
                            else {
                                System.out.print(linesp[j2]+" ");

                            }
                        }
                    }
                    else {
                        for (int j2 =2; j2 < linesp.length; j2++) {
                            System.out.print(linesp[j2]+" ");
                        }   
                    }

                    System.out.println();
                 is_404=false;
                break;
                }

            }
            if (is_404) {
                System.out.println("404");
            }
        }

    }

    static boolean is_equal(String str,String type){
            if (type.equalsIgnoreCase("int")) {
                boolean result= is_int(str);
                return result;
            }
            else if (type.equalsIgnoreCase("str")) {
                return true;
            }
        return false;
    }

    static boolean is_int(String str){
        try {
            int a=Integer.parseInt(str);
            return true;
        } catch (Exception e) {
            return false;
            // TODO: handle exception
        }

    }

    static String findType( String str){
         int length=str.length()-1;
    String string=str.substring(1,length);
    return string;
}

    static void outstr (String a[]){
        for (int i = 0; i < a.length; i++) {
            System.out.println(a[i]);
        }
    }

    static void out (int a[]){
        for (int i = 0; i < a.length; i++) {
            System.out.print(a[i]+" ");
        }
        System.out.println();
    }
    static int[] transfer(String str[]){
        int a[]=new int [str.length];
                for (int i = 0; i < str.length; i++) {
            a[i]=Integer.parseInt(str[i]);              
        }
         return a;
    }
}

希望能幫助到大家

等題目出來後我會重新做一遍的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章