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

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

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

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

  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天的时间,其中还是人力统计还会有可能出错。所以花费这点时间写代码还是很有用的。最主要是锻炼了解决问题的思维,以后碰到问题之后要想最优解是什么而不是拿到一个问题就直接上来闷头干,有可能最后还吃力不讨好。

相关文章
|
程序员 项目管理
程序员如何做好个人职业规划彻底摆脱焦虑?
程序员如何做好个人职业规划彻底摆脱焦虑?
136 0
|
2月前
|
安全
技术探索的旅程:从困惑到顿悟
在技术的浩瀚海洋中,每一位探索者都会面临无数的挑战与困惑。本文通过作者个人的技术感悟,分享了从初入职场的迷茫到成为团队核心成员的心路历程,以及在这个过程中积累的宝贵经验。文章旨在启发读者,无论面对何种技术难题,只要保持学习的热情和坚持不懈的精神,总能找到解决问题的方法。
|
23天前
|
人工智能 前端开发 数据挖掘
技术之旅:从迷茫到明晰的自我探索
在技术的海洋中航行,每个人都是一名探险者。本文通过个人成长的视角,探讨了技术学习过程中的挑战与收获,以及如何通过不断学习和实践来找到自我价值和方向。文章强调了持续学习的重要性,并鼓励读者勇敢面对未知,拥抱变化。
|
2月前
|
JavaScript 前端开发 Java
技术探索之旅:从迷茫到顿悟
本文记录了作者在技术领域的探索历程,从初入行的迷茫、尝试新领域的勇气,到不断学习和提升后的顿悟。通过个人经历,展现了技术成长的曲折与收获。
|
2月前
|
机器学习/深度学习 人工智能 开发者
技术之道:从迷茫到明晰的自我探索
在技术的海洋里,每位开发者都是在不断试错和成长的旅程中。本文通过个人经历,探讨了如何从初入职场的迷茫中找到自己的技术方向,并分享了持续学习和实践的重要性。
40 4
|
开发工具 git 开发者
面对躺平同事,我开发了一个插件治好了我的精神内耗⚡⚡⚡
面对躺平同事,我开发了一个插件治好了我的精神内耗⚡⚡⚡
|
NoSQL Java 程序员
要学的东西太多,自己能力不足,很焦虑怎么办
总有人问我,兔哥,现在java要学的知识点这么多,记不住,怕学不精很焦虑怎么办? 这是很多初学者都有的痛点。 其实吧,你可以试试贪多而不必嚼烂。
181 0
|
安全 开发者
开发者“请回答”!HN 热帖“当你对软件开发感到失望,该如何规划职业道路?”
开发者“请回答”!HN 热帖“当你对软件开发感到失望,该如何规划职业道路?”
200 0
开发者“请回答”!HN 热帖“当你对软件开发感到失望,该如何规划职业道路?”
远程工作两个月后的体会
自己开公司,就是自己在定规矩。你自己决定如何使用手头上的钱,如何建立公司的组织结构,以及你在何时何地工作。
152 0
远程工作两个月后的体会
|
移动开发 缓存 前端开发
圣司:我的前端成长之路,内观自在,外观世音,追寻内心平静
最文艺的前端成长之路分享,相信我,读完它你一定收获良多。
圣司:我的前端成长之路,内观自在,外观世音,追寻内心平静