ccf csp JSON查询

来源:互联网 发布:转基因食品 知乎 编辑:程序博客网 时间:2024/05/16 10:41
import java.util.LinkedHashMap;import java.util.Scanner;public class Main {    private Scanner input = new Scanner(System.in);    private LinkedHashMap<String,String> dict = new LinkedHashMap<>();    public static void main(String[] args) {        new Main().run();    }    private void run() {        int n = input.nextInt();        int m = input.nextInt();        input.nextLine();        StringBuffer sb = new StringBuffer();        String str = "";        for (int i = 0; i < n; i++) {            sb.append(input.nextLine());        }        str = sb.toString();        dealwithjson(str);//        for (String s : dict.keySet()) {//            System.out.println(s+" "+dict.get(s));//        }        String ask;        for (int i = 0; i < m; i++) {            ask = input.nextLine();            ask = dict.get(ask);            if (ask==null){                System.out.println("NOTEXIST");            }else if (ask.equals("fuckccf")){                System.out.println("OBJECT");            }else {                System.out.println("STRING"+" "+ask);            }        }    }    private void dealwithjson(String str) {        // 先扒皮,扒掉第一个和最后一个{}        int lbrace = str.indexOf("{");        int rbrace = str.lastIndexOf("}");        str = str.substring(lbrace + 1, rbrace).trim();//        System.out.println(str);        Node node = new Node("",str);        String key;        String val;        if (node.remain.equals("")){            return;        }        while (true){            //获取key            node = gettoken(node.remain);            key = node.token;            //获取:            str = node.remain;            node = gettoken(str);            //获取value            node = gettoken(node.remain);            val = node.token;            if (node.isobj){                dict.put(key,"fuckccf");                dealsomejson(key,val);            }else {                dict.put(key,val);            }            //获取,            node = gettoken(node.remain);            if (node == null){                break;            }        }    }    private void dealsomejson(String subkey, String str) {        // 先扒皮,扒掉第一个和最后一个{}        int lbrace = str.indexOf("{");        int rbrace = str.lastIndexOf("}");        str = str.substring(lbrace + 1, rbrace).trim();        Node node = new Node("",str);        String key;        String val;        if (node.remain.equals("")){            return;        }        while (true){            //获取key            node = gettoken(node.remain);            key = node.token;            //获取:            str = node.remain;            node = gettoken(str);            //获取value            node = gettoken(node.remain);            val = node.token;            if (node.isobj){                dict.put(subkey+"."+key,"fuckccf");                dealsomejson(subkey+"."+key,val);            }else {                dict.put(subkey+"."+key,val);            }            //获取,            node = gettoken(node.remain);            if (node == null){                break;            }        }    }    private Node gettoken(String str) {        if (str.equals(""))            return null;        char c = str.charAt(0);        switch (c){            case ',':            case ':':                return new Node(c+"",str.substring(1).trim());            case '{':                int rbrace = getrbrace(str);                return new Node(str.substring(0,rbrace+1),str.substring(rbrace+1).trim(),true);            case '\"':                StringBuilder sb = new StringBuilder();                int falg = 1;                int i;                for (i = 1; i < str.length(); i++) {                    if (str.charAt(i)=='\\'&&falg==1){                        falg = 2;                        continue;                    }                    if (str.charAt(i)=='\"'&&falg==1){                        break;                    }                    if (falg == 2){                        falg = 1;                    }                    sb.append(str.charAt(i));                }                return new Node(sb.toString(),str.substring(i+1).trim());        }        return null;    }    private int getrbrace(String str) {        boolean instr = false;        int rbrace = 0;        int index = 0;        for (int i = 0; i < str.length(); i++) {            if (str.charAt(i) == '{'&&!instr){                rbrace++;            }            if (str.charAt(i) == '}'&&!instr){                rbrace--;            }            if (rbrace==0){                index = i;                break;            }            if (str.charAt(i) == '\"'){                i++;                while (true){                    if (str.charAt(i)=='\\'){                        i+=2;                    }else {                        i++;                    }                    if (str.charAt(i)=='\"'){                        break;                    }                }            }        }        return index;    }    class Node{        boolean isobj;        String token;        String remain;        public Node(String token,String remain){            this.token = token;            this.remain = remain;            isobj = false;        }        public Node(String token,String remain,boolean isobj){            this.token = token;            this.remain = remain;            this.isobj = isobj;        }        @Override        public String toString() {            return token;        }    }}