关于Map的处理,在线等

六月暴雪飞梨花
后端领域新星创作者
2014-08-12 07:48:40
这里有这样子一个字符窜:

ab=12&cd={ef=gh&ij=kl}&ml=op


这里是按照Key Value 组装在一起的,
我想输出来如下,请问怎么处理:
ab=12

cd={ef=gh&ij=kl}

ml=op


最主要的是中间的带有大括号的怎么处理。
...全文
129 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
已经解决了,不过还是谢谢楼上的

/**
	 * 解析应答字符串,生成应答要素
	 * 
	 * @param str
	 *            需要解析的字符串
	 * @return 解析的结果map
	 * @throws UnsupportedEncodingException
	 */
	public static Map<String, String> parseQString(String str)
			throws UnsupportedEncodingException {

		Map<String, String> map = new HashMap<String, String>();
		int len = str.length();
		StringBuilder temp = new StringBuilder();
		char curChar;
		String key = null;
		boolean isKey = true;
		int add = 1;
		for (int i = 0; i < len; i++) {// 遍历整个带解析的字符串
			curChar = str.charAt(i);// 取当前字符
			if (curChar == '&') {// 如果读取到&分割符
				if (add==2) {
					temp.append(curChar);
				}else {
					putKeyValueToMap(temp, isKey, key, map);
					temp.setLength(0);
					isKey = true;
				}
			} else {
				if (curChar == '{') {
					add = 2;
					
				}
				if (curChar == '}') {
					add = 3;
				}
				if (isKey) {// 如果当前生成的是key
					if (curChar == '=') {// 如果读取到=分隔符
						key = temp.toString();
						temp.setLength(0);
						isKey = false;
					} else {
						temp.append(curChar);
					}
				} else {// 如果当前生成的是value
					temp.append(curChar);
				}
			}
		}

		putKeyValueToMap(temp, isKey, key, map);

		return map;
	}

	private static void putKeyValueToMap(StringBuilder temp, boolean isKey,
			String key, Map<String, String> map)
			throws UnsupportedEncodingException {
		if (isKey) {
			key = temp.toString();
			if (key.length() == 0) {
				throw new RuntimeException("QString format illegal");
			}
			map.put(key, "");
		} else {
			if (key.length() == 0) {
				throw new RuntimeException("QString format illegal");
			}
			map.put(key, URLDecoder.decode(temp.toString(), UpmpConfig.CHARSET));
		}
	}
  • 打赏
  • 举报
回复
引用 1 楼 deltatang 的回复:
抓鬼要用保鲜膜 打鬼要用巧克力 多重嵌套用stack解析~~
自己还没有理清楚这个逻辑,还请明示。。
唐三角 2014-08-12
  • 打赏
  • 举报
回复
抓鬼要用保鲜膜 打鬼要用巧克力 多重嵌套用stack解析~~

50,530

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧