网站建设的一般流程是,东莞seo优化公司,网站排名优化原理,在猪八戒上做网站要注意什么连续的KV的字符串#xff0c;每个KV之间用,分隔#xff0c;V中可嵌套KV的连续字符串结构#xff0c;例如“
key1value1,key2value2,key3[key4value4,key5value5,key6[key7value7]],key8value8
请编写如下函数#xff0c;给定字符串#xff0c;输出嵌套结构的H…连续的KV的字符串每个KV之间用,分隔V中可嵌套KV的连续字符串结构例如“
key1value1,key2value2,key3[key4value4,key5value5,key6[key7value7]],key8value8
请编写如下函数给定字符串输出嵌套结构的HashMap
HashMapString, Object parse(String input) {...
}暂时没想出一个方法不用递归就能解析完的
解法1 只处理当前字符串第一个嵌套体位置的前面普通键值对将第一个嵌套体内容递归处理将第一个嵌套体后面剩余的字符串递归处理 HashMapString,Object parse(String input){HashMapString,Object hashMapnew HashMap();char[] charsinput.toCharArray();int keyStart0;int start-1;//[位置int end-1;//]位置int stack0;//栈计数器for (int i0;ichars.length;i){if(chars[i][){stack;if(stack1){starti1;for(int ji;j0;j--){if(chars[j],){keyStartj1;break;}}}}else if(chars[i]]){if(stack1){endi;break;}stack--;}}String[] keyValueArraynew String[0];if(start-1){//这里处理前半截if(keyStart-10){keyValueArrayinput.substring(0,keyStart-1).split(,);}//发现有[] , 递归处理String tempinput.substring(start,end);hashMap.put(input.substring(keyStart,start-2),parse(temp));//发现后面还有东西if(endinput.length()-1){hashMap.putAll( parse(input.substring(end1)));}}else{//没有发现[]keyValueArrayinput.split(,);}for(String kv:keyValueArray){if(.equals(kv.trim()))continue;String[] arraykv.split();hashMap.put(array[0],array[1]);}return hashMap;}解法2 当前字符串中所有普通键值对进行处理将所有遇到的嵌套体内容递归处理 HashMapString, Object parse(String input) {HashMapString, Object hashMap new HashMap();char[] chars input.toCharArray();int kvStart 0;//记录当前键值对的开始字段int keyStart 0;int start -1;//[位置int end -1;//]位置int stack 0;//栈计数器for (int i 0; i chars.length; i) {if (chars[i] , stack 0) {//stack0表示不在嵌套结构内作为普通的键值对解析String[] array input.substring(kvStart, i).split();hashMap.put(array[0], array[1]);kvStart i 1;}else if(ichars.length-1chars[i] ! ]){//尾部处理如果是普通的字符串尾部肯定不是]作为普通键值对String[] array input.substring(kvStart, i1).split();hashMap.put(array[0], array[1]);}else if (chars[i] [) {stack;if (stack 1) {//第一次嵌套开始start i 1;//嵌套内容起始位置for (int j i; j 0; j--) {if (chars[j] ,) {keyStart j 1;//当前嵌套体的key起始字符位置break;}}}} else if (chars[i] ]) { //第一次嵌套结束if (stack 1) {end i;hashMap.put(input.substring(keyStart, start - 2), parse(input.substring(start, end)));i;//跳过逗号kvStart i 1;//下个键值对的起始位置}stack--;}}return hashMap;}