CCFJson查询之Java实现代码

来源:互联网 发布:绥化学院教务管理网络 编辑:程序博客网 时间:2024/05/18 03:08

首先声明这份代码在提交时显示运行错误但是能在自己的平台上通过给出的测试用例,所以我就很想不明白,CCF第三题这种的,如果能在自己的平台上得到指定的答案,说明程序主体是没有问题的,就算没有考虑全面但至少也能通过部分案例,这样直接显示运行错误而且输入输出都很符合要求真的让我无法接受。。。毕竟花了一个下午敲出来的心态崩了

所以哪位路过的大神能看来哪里不合题意请一定不吝赐教!

题目如下:



代码如下:

package CCF;import java.util.HashMap;import java.util.Scanner;public class Json1709_03 {public static String str_tag="";    //用来标记值第n层对象的前缀public static HashMap<String,String> json; public static void deal(String s) {int len=s.length();if(len==2) {str_tag=str_tag.substring(0, str_tag.length()-1);  //去掉最后一个黑点if(str_tag.contains(".")) {int index=str_tag.lastIndexOf(".");str_tag=str_tag.substring(0, index);}elsestr_tag="";}else {String []ss=s.split(" ");//表明该处对应的的是一个对象if(ss[1].equals("{")){ss[0]=solve(ss[0]);str_tag=str_tag+ss[0]+".";json.put(str_tag.substring(0,str_tag.length()-1), "OBJECT");}else {//如果只是一个普通的字符串ss[0]=solve(ss[0]);ss[1]=solve(ss[1]);json.put(str_tag+ss[0],"STRING "+ss[1]);}}}public static String solve(String s) {int len=s.length();if(s.charAt(len-1)==':'||s.charAt(len-1)==',')s=s.substring(1, len-2);elses=s.substring(1, len-1);s=dealback(s);return s;}public static String dealback(String s) {StringBuffer sb=new StringBuffer();int len=s.length();for(int i=0;i<len;i++) {if(s.charAt(i)=='\\')i++;sb.append(s.charAt(i));}s=sb.toString();return s;}public static void main(String args[]) {Scanner scan=new Scanner(System.in);String []str=scan.nextLine().split(" ");int n=Integer.parseInt(str[0]);   //数据行数int m=Integer.parseInt(str[1]);   //查询指令个数json=new HashMap<String,String>();for(int i=0;i<n;i++) {String s=scan.nextLine();if(s.length()!=1)deal(s);}for(int i=0;i<m;i++) {String s=scan.nextLine();if(json.containsKey(s))System.out.println(json.get(s));elseSystem.out.println("NOTEXIST");}}}

在提交时该去的中文都去了,Main函数也改了,而且显示的是运行错误不是编译错误,但是自己平台上测试用例是合格的。

就算没分也记录一下吧,思路还是可取的。。

原创粉丝点击