您的位置:首页 > Web前端 > JavaScript

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;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  json ccf