不学无数——在工作中被逼出来的解决之道

简介: 在工作中被逼出来的解决之道相信初入职场的小伙伴们肯定经历过在组内统计一些东西的事情,简单却繁琐。前一段时间给了一个关于统计组内各个系统中都用了哪些用户下的表的任务。

在工作中被逼出来的解决之道

相信初入职场的小伙伴们肯定经历过在组内统计一些东西的事情,简单却繁琐。前一段时间给了一个关于统计组内各个系统中都用了哪些用户下的表的任务。刚拿到这个任务的时候,就是按照之前的思维模式进行完成的,直接在编辑工具中全局搜索查找用户名.(因为我们公司的表都是用户名.表名),在第一个系统中的时候我这么干还行,因为涉及到的用户也少,表也少。所以也就很快的按部就班的完成了,但是随着后面系统的越来越多,涉及到的用户以及表越多,如果我还是这么干下去,无聊不说而且容易出错。最主要原因还是懒,太浪费时间了,所以想想有没有更加简单便捷的办法能够帮我完成这些事。找人帮忙是不可能的,思来想去熟悉的只有写代码了。所以分析了下这件事的可行性。

  1. 用的Mybatis框架,所以sql都是存放在xml文件中。存放地址统一。
  2. 公司的表有一套命名规范,基本上都是用户名.T_用户名_表名。考虑用正则表达式解析

所以基本上思路就清晰了

  1. 用IO流读取放着sql的所有xml文件
  2. 正则表达式将匹配的信息取出来
  3. Map<String,List<String>>根据key为用户名来存储各个表

第一步是先写了读取文件夹下所有文件的代码:

 public static String getFileName(String path) throws IOException {
        File file = new File(path);
        File[] tempList = file.listFiles();
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 0; i < tempList.length; i++) {
            if (tempList[i].isDirectory()){
               //如果是文件夹就进行递归调用
                String str2 =getFileName(tempList[i].getPath());
                stringBuilder.append(str2);
            }
            else {
                String str = readFile(path+"/"+tempList[i].getName());
                stringBuilder.append(str);
            }
        }
        return stringBuilder.toString();
    }

在刚写这段代码的时候,卡到了对于文件夹的下面还存在文件夹的问题上,因为有可能A文件夹存在B文件夹,B文件夹下存在C文件等等。然后突然想到了这和之前学过的组合模式非常的相似,都是描述部分和整体关系。意思就是使得用户对单个对象和组合对象的使用具有一致性。

第二步这里就写了关于正则表达式提数

public static String readFile(String fileName) throws IOException {
      BufferedReader bufferedReader = new BufferedReader(new FileReader(fileName));
      String str;
      StringBuilder stringBuilder = new StringBuilder();
      while ((str = bufferedReader.readLine()) != null){
          stringBuilder.append(str.toUpperCase() +"\n");
      }
      bufferedReader.close();
      String str2 = stringBuilder.toString().toUpperCase().replaceAll("\t","");
      String pattern = "T_[A-Z][A-Z][A-Z]_[A-Z_]+";
      Pattern r = Pattern.compile(pattern);
      Matcher matcher = r.matcher(str2);
      StringBuilder resultString = new StringBuilder();
      while (matcher.find()){
          String result= matcher.group(0);
          resultString.append(result+"\n");
      }
      return resultString.toString();
  }

第三步就是对于所有提出来的数进行去重和归类

public static void printDate(String string){

      String [] ArrStr= string.split("\n");
      Set<String> set =new HashSet();
      Map<String,List<String>> map = new HashMap<>();
      for (int i = 0; i < ArrStr.length; i++) {
          set.add(ArrStr[i]);
      }
      for (String s:set){
          if (!s.isEmpty()){
              String qianzhui=s.substring(s.indexOf("_")+1,s.indexOf("_")+4);
              String tableName= qianzhui+"."+s;
              if (!map.containsKey(qianzhui)){
                  List<String> list = new ArrayList<>();
                  list.add(tableName);
                  map.put(qianzhui,list);
              }else {
                  List<String> resultList = map.get(qianzhui);
                  resultList.add(tableName);
                  map.put(qianzhui,resultList);
              }
          }
      }
      for (String str:map.keySet()){
          System.out.println(str);
          List myList = map.get(str);
          myList.forEach((resultStr)->{
              System.out.println(resultStr);
          });
          System.out.println("-------------");
      }
  }

虽然写代码花费了一些时间,但是花费2小时写代码,统计所有的系统有可能得1天的时间,其中还是人力统计还会有可能出错。所以花费这点时间写代码还是很有用的。最主要是锻炼了解决问题的思维,以后碰到问题之后要想最优解是什么而不是拿到一个问题就直接上来闷头干,有可能最后还吃力不讨好。

相关文章
|
程序员 项目管理
程序员如何做好个人职业规划彻底摆脱焦虑?
程序员如何做好个人职业规划彻底摆脱焦虑?
156 0
|
3月前
|
算法 开发者
编程之旅:从迷茫到精通的蜕变之路
【10月更文挑战第37天】编程,一个看似高深莫测的世界,却充满了无限可能。它不仅仅是一种技能,更是一种思维方式和解决问题的艺术。本文将带你走进编程的世界,探索它的奥秘,分享作者在编程旅途中的感悟和经验。无论你是编程新手还是资深开发者,这篇文章都将为你提供新的视角和思考方式,让你重新审视编程,并找到属于自己的道路。让我们一起踏上这段充满挑战与乐趣的编程之旅吧!
62 34
|
3月前
|
设计模式 程序员
从零到一:我的编程之旅与技术感悟
【10月更文挑战第22天】这是一篇关于个人编程学习经历和技术感悟的文章。文章以通俗易懂的语言,讲述了作者从一个编程新手,通过不断学习和实践,逐渐成长为一名熟练的程序员的过程。文章不仅分享了学习编程的方法和技巧,还深入探讨了编程的本质和意义,对于想要学习编程的人来说,具有很好的启发和指导作用。
48 2
|
4月前
|
人工智能 前端开发 数据挖掘
技术之旅:从迷茫到明晰的自我探索
在技术的海洋中航行,每个人都是一名探险者。本文通过个人成长的视角,探讨了技术学习过程中的挑战与收获,以及如何通过不断学习和实践来找到自我价值和方向。文章强调了持续学习的重要性,并鼓励读者勇敢面对未知,拥抱变化。
|
5月前
|
JavaScript 前端开发 Java
技术探索之旅:从迷茫到顿悟
本文记录了作者在技术领域的探索历程,从初入行的迷茫、尝试新领域的勇气,到不断学习和提升后的顿悟。通过个人经历,展现了技术成长的曲折与收获。
|
5月前
|
前端开发 JavaScript 算法
编程之旅:从迷茫到精通的心路历程
【9月更文挑战第20天】在编程的世界里,每个人都是一名旅者。起初,面对复杂的代码和逻辑,我们如同初入森林的探险者,既充满好奇又感到迷茫。然而,正如古人云:“千里之行,始于足下。”通过不断学习和实践,我们逐渐找到了属于自己的路径。本文将分享一位程序员的成长故事,从大学毕业时的迷茫,到大胆尝试新领域,再到不断学习和提升,最终找到人生方向的过程。让我们一起跟随他的脚步,探索编程之旅的奥秘与乐趣。
|
5月前
|
前端开发 安全 JavaScript
从迷茫到精通:我的编程之旅与技术感悟
【9月更文挑战第26天】在编程的世界里,每一步都充满了挑战和机遇。本文是一段个人的技术旅程,从最初的迷茫不安到逐渐找到自己的方向,再到深入理解编程的本质。通过分享个人的经验和感悟,旨在启发读者思考如何在技术的海洋中航行,找到属于自己的灯塔。
|
文字识别 算法 NoSQL
读书分享:《程序员修炼之道:通向务实的最高境界》的思想经验
相较于全书众多的干货笔记,这篇文章是个别思想经验的总结,希望和大家交流。 ETC;DRY不仅限于编码;维护一个项目概念列表;帮助业务方理解他想要什么;防御性编程;继承税;学会沟通;小实验
读书分享:《程序员修炼之道:通向务实的最高境界》的思想经验
|
传感器 机器学习/深度学习 Kubernetes
2023年的程序员将何去何从
2023年的程序员将何去何从