2018年三月---第13次CCF考试---第三题---java版

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/fanjialiang2401/article/details/79681422

第三题

  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;
    }
}

希望能帮助到大家

等题目出来后我会重新做一遍的

展开阅读全文

没有更多推荐了,返回首页