ccf csp JSON查询
2017-10-13 15:23
411 查看
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(); 4000 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; } } }
相关文章推荐
- CCF CSP真题——201709-3 json查询
- CCF CSP 201709-3 JSON查询
- CCF-CSP JSON串查询
- CCF CSP 201709-3 JSON查询
- CCF CSP 权限查询 JAVA 201612-3
- CCF-CSP -201612-3 权限查询参考答案
- 第九届CCF CSP认证 第三题:权限查询
- CCF-CSP 权限查询 JAVA 201612-3
- CCF 201709-3 JSON查询
- CCF csp第九次认证考试 试题三 权限查询
- CCF JSON查询
- 201709-3 JSON查询 ccf
- CCF CSP试题 201612-3 权限查询
- csp ccf 201612-3 权限查询java 100分
- [CCF-CSP]201612-3(权限查询)
- CCF CSP 编程题目和解答-----试题名称:权限查询-------201612-3
- CCF 201709-3 JSON查询(Java)
- CCFJson查询之Java实现代码
- csp201709-3 json查询
- ccf 201709-3 Json查询