问题来源:从缓存中取出的数据没有空格和换行,很难阅读,但又找不到像JSON一样的在线格式化工具。灵机一动,自己写了一个小程序将其格式化。

一、先看效果
1、原始数据长这样,难以阅读

MemCachedItem{同一申请客户Xh内登录的设备列表=TimedItems {allItems={2016-09-23 22:08:08.253={merged=false, limit=0, list=[caZ8d17967b615ceb1V164793Zbb8gei147319824612056b949f73a22797cee0]}}}, 同一用户近xd内登录时间段和次数=TimedItems {allItems={2016-09-23 22:08:08.253={merged=false, limit=0, map={22=CountNumber {count=1, value=1, merged=false}}}}}, reference_time=1474640150272, primary_biz=PAY.BUY, expire_duration=31536000000, primary_tag=机构号加用户号, 同一用户近xM平台内部最大逾期天数=TimedItems {allItems={2016-09-23 22:14:14.423=MaxNumber {count=1, value=0, merged=false}, 2016-09-23 22:15:50.246=MaxNumber {count=1, value=0, merged=false}}}, 同一用户近xd内使用的IP地址和次数=TimedItems {allItems={2016-09-23 22:08:08.258={merged=false, limit=0, map={112.17.239.160=CountNumber {count=1, value=1, merged=false}}}, 2016-09-23 22:14:14.445={merged=false, limit=0, map={112.17.239.160=CountNumber {count=1, value=1, merged=false}}}, 2016-09-23 22:15:50.272={merged=false, limit=0, map={112.17.239.160=CountNumber {count=1, value=1, merged=false}}}}}, 同一用户最近Xpd内操作APP时间段频率集合=TimedItems {allItems={2016-09-23 22:08:08.253={merged=false, limit=0, map={8=CountNumber {count=1, value=1, merged=false}}}, 2016-09-23 22:14:14.440={merged=false, limit=0, map={8=CountNumber {count=1, value=1, merged=false}}}, 2016-09-23 22:15:50.266={merged=false, limit=0, map={8=CountNumber {count=1, value=1, merged=false}}}}}, 同一用户最近登录时间列表=TimedItems {allItems={2016-09-23 22:08:08.253={merged=false, limit=0, list=[Fri Sep 23 22:08:08 CST 2016]}}}, primary_key=123456-3177000000019572, 同一用户最近Xpd登陆的各设备指纹频率集合=TimedItems {allItems={2016-09-23 22:08:08.253={merged=false, limit=0, map={caZ8d17967b615ceb1V164793Zbb8gei147319824612056b949f73a22797cee0=CountNumber {count=1, value=1, merged=false}}}, 2016-09-23 22:14:14.440={merged=false, limit=0, map={caZ8d17967b615ceb1V164793Zbb8gei147319824612056b949f73a22797cee0=CountNumber {count=1, value=1, merged=false}}}, 2016-09-23 22:15:50.266={merged=false, limit=0, map={caZ8d17967b615ceb1V164793Zbb8gei147319824612056b949f73a22797cee0=CountNumber {count=1, value=1, merged=false}}}}}, 同一用户Xd使用登录设备和次数=TimedItems {allItems={2016-09-24 00:00:00.000={merged=true, limit=0, map={caZ8d17967b615ceb1V164793Zbb8gei147319824612056b949f73a22797cee0=CountNumber {count=1, value=1, merged=false}}}}}}

2、这样就好多了

MemCachedItem{同一申请客户Xh内登录的设备列表=TimedItems {allItems={2016-09-23 22:08:08.253={merged=false, limit=0, list=[caZ8d17967b615ceb1V164793Zbb8gei147319824612056b949f73a22797cee0]}}}, 同一用户近xd内登录时间段和次数=TimedItems {allItems={2016-09-23 22:08:08.253={merged=false, limit=0, map={22=CountNumber {count=1, value=1, merged=false}}}}}, reference_time=1474640150272, primary_biz=PAY.BUY, expire_duration=31536000000, primary_tag=机构号加用户号, 同一用户近xM平台内部最大逾期天数=TimedItems {allItems={2016-09-23 22:14:14.423=MaxNumber {count=1, value=0, merged=false}, 2016-09-23 22:15:50.246=MaxNumber {count=1, value=0, merged=false}}}, 同一用户近xd内使用的IP地址和次数=TimedItems {allItems={2016-09-23 22:08:08.258={merged=false, limit=0, map={112.17.239.160=CountNumber {count=1, value=1, merged=false}}}, 2016-09-23 22:14:14.445={merged=false, limit=0, map={112.17.239.160=CountNumber {count=1, value=1, merged=false}}}, 2016-09-23 22:15:50.272={merged=false, limit=0, map={112.17.239.160=CountNumber {count=1, value=1, merged=false}}}}}, 同一用户最近Xpd内操作APP时间段频率集合=TimedItems {allItems={2016-09-23 22:08:08.253={merged=false, limit=0, map={8=CountNumber {count=1, value=1, merged=false}}}, 2016-09-23 22:14:14.440={merged=false, limit=0, map={8=CountNumber {count=1, value=1, merged=false}}}, 2016-09-23 22:15:50.266={merged=false, limit=0, map={8=CountNumber {count=1, value=1, merged=false}}}}}, 同一用户最近登录时间列表=TimedItems {allItems={2016-09-23 22:08:08.253={merged=false, limit=0, list=[Fri Sep 23 22:08:08 CST 2016]}}}, primary_key=123456-3177000000019572, 同一用户最近Xpd登陆的各设备指纹频率集合=TimedItems {allItems={2016-09-23 22:08:08.253={merged=false, limit=0, map={caZ8d17967b615ceb1V164793Zbb8gei147319824612056b949f73a22797cee0=CountNumber {count=1, value=1, merged=false}}}, 2016-09-23 22:14:14.440={merged=false, limit=0, map={caZ8d17967b615ceb1V164793Zbb8gei147319824612056b949f73a22797cee0=CountNumber {count=1, value=1, merged=false}}}, 2016-09-23 22:15:50.266={merged=false, limit=0, map={caZ8d17967b615ceb1V164793Zbb8gei147319824612056b949f73a22797cee0=CountNumber {count=1, value=1, merged=false}}}}}, 同一用户Xd使用登录设备和次数=TimedItems {allItems={2016-09-24 00:00:00.000={merged=true, limit=0, map={caZ8d17967b615ceb1V164793Zbb8gei147319824612056b949f73a22797cee0=CountNumber {count=1, value=1, merged=false}}}}}
}

二、编程实现
仔细观察一下缓存中的数据,发现只有大括号和中括号,并且成对出现。这不就是大学数据结构课程中典型的括号匹配算法的变形吗?既然是括号问题,就可以考虑用栈来实现。代码如下:

package test;import java.util.Stack;/*** 格式化MemCachedItem,便于阅读* -----------------------------------------* @author Lynch 2016年9月24日 下午5:32:02 * -----------------------------------------*/
public class CacheDataFormatUtil {/*** 用栈解决括号匹配问题,实现数据格式化* * @param str* @return*/public static String getFormatCacheData(String str) {Stack<Character> st = new Stack<Character>();StringBuffer sb = new StringBuffer();for (int i = 0; i < str.length(); i++) {if (str.charAt(i) == '{' || str.charAt(i) == '[') {st.push(str.charAt(i));sb.append(str.charAt(i));sb.append('\n');for (int j = 0; j < st.size(); j++) {sb.append('\t');}} else if (str.charAt(i) == '}' || str.charAt(i) == ']') {st.pop();sb.append('\n');for (int j = 0; j < st.size(); j++) {sb.append('\t');}sb.append(str.charAt(i));} else {sb.append(str.charAt(i));}}return sb.toString();}}

快速解决工作中遇到经典的括号匹配问题相关推荐

  1. Linux 运维工作中的经典应用ansible(批量管理)Docker容器技术(环境的快速搭建)...

    一 Ansible自动化运维工具 Python 在运维工作中的经典应用ansible(批量管理操作)1.安装ansible(需要bese epel 2种源) wget -O /etc/yum.repo ...

  2. 计算机excel按F4是那个公式,功能键F4你真的会用?Excel四大F4快捷操作,轻松解决工作中问题...

    对于多数人来说,在键盘上面经常会看到F1-F12等不同的功能键.今天我们就来学习一下功能键F4的一些操作,看看在Excel中F4到底有哪些不一样的特别操作.为什么说F4快捷操作可以快速提升我们的工作效 ...

  3. 如何快速解决Unity中万向节死锁(gimbal lock)的问题

    如何快速解决Unity中万向节死锁(gimbal lock)的问题 转载连接:https://www.jianshu.com/p/59acdd1c9db8 万向节死锁的根本问题是欧拉角(EulerAn ...

  4. PS技巧-如何快速解决合成中的光影

    Photoshop CC 2019 for Mac 专为所有设计人员而设计.只要您能想得到,您便可以使用 Photoshop 这一全球最佳的图像和设计应用程序将您想象中的内容制作出来.创建和增强照片. ...

  5. 常用的xpath定位,通过一个元素去定位另一个元素,基本上能解决工作中所有定位

    前言 今天和大家分享几个工作中经常使用的xpath定位,基本上能解决工作中所有定位. 一.输入框类 1.有提示信息的,例如:placeholder="请输入用户名",则可以通过相应 ...

  6. renpy 如何执行2个action_如何解决工作中遇到问题丨2个思考方式、2个技巧和1个解决系统...

    2020年我遇到两次工作中出现了很麻烦的问题,第一次我是感觉到似乎天都要塌了,这要是解决不了我该怎么办呢?焦虑的情绪比问题还要更难解决,我不止一次流泪想着要是解决不了怎么办啊?我闺蜜说你一个老师,再大 ...

  7. element表格多列排序_Excel表格在工作中的经典用法,建议收藏!

    一.分类汇总(使用前先排序) 1.利用分类汇总分类目统计金额 首先对类目名称进行排序,找到[数据-分类汇总]告诉表格:按什么分类,把什么汇总 ,如何汇总. 在右上方有1.2.3字样,分别为总金额.各三 ...

  8. 程序员如何解决工作中的技术问题?

    我们在工作中通常都会越到各种各样的问题,有的是设计方案上的问题,有的是框架使用上的问题,有的是中间件配置上的问题,等等.每个人都不是万能的,在面对各种问题和挑战的时候,相信每个人都有自己解决问题的方式 ...

  9. 如何用分析方法解决工作中的问题?

    我是多之剑: 这是我日常工作中遇到的一个真实的案例,通过发现问题和尝试找到原因,我完成了日常的工作.同时,我想通过这个案例告诉你电商行业的分析思路. 1.明确问题 2019年11月12日,双11大战刚 ...

最新文章

  1. Python 运算符之成员运算符 in 与 not in
  2. 想快速入门NLP?我们测评了15门最火课程,帮你找到最适合的
  3. 惨!重新申请了网页的Counter
  4. 视频大变革:需要技术,也需要情怀
  5. visual studio 64位汇编 listing列表文件
  6. 你该认识这样的Linux_shell之变量操作符与分支判断
  7. 行程单图片python预处理_GCC编译过程(预处理-gt;编译-gt;汇编-gt;链接)
  8. 6万人同时离场,竟然一点都不挤?原来用了这个神器
  9. 六个步骤 教你搭建Ubuntu nfs服务器
  10. UML用例图之关联关系、包含关系、扩展关系、泛化关系详解
  11. iOS 开发 : 14个技巧助你适配 iOS10
  12. 下载maven依赖的方法步骤
  13. 基于Springboot的医院管理系统-JAVA【毕业设计、论文、源码、开题报告】
  14. TIOBE 2月编程语言排行榜出炉:Python遥遥领先C语言
  15. 电脑一键U盘启动快捷键
  16. 加权GN算法的Java实现
  17. 人工智能 —— A*算法
  18. MSSQL 系统函数
  19. Ed2k链接生成工具介绍
  20. 使用AVPlaer创建视屏播放器

热门文章

  1. 分享到JavaScript实现
  2. 浏览器窗口控制---使用localStorage
  3. QT设计UI:QT模式对话框打开文件
  4. 【high-speed-downloader】百度网盘不限速下载 支持 Windows 和 Mac
  5. Linux编程 8 (挂载mount,查看磁盘df du,搜索grep,压缩zgip,归档tar)
  6. set和dict理论和操作
  7. Django模板语言
  8. 更改 pandas dataframe 中两列的位置
  9. 二十四种设计模式:代理模式(Proxy Pattern)
  10. iOS常用于显示几小时前/几天前/几月前/几年前的代码片段