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

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

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

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

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

相关文章
|
程序员 项目管理
程序员如何做好个人职业规划彻底摆脱焦虑?
程序员如何做好个人职业规划彻底摆脱焦虑?
147 0
|
3月前
|
机器学习/深度学习 人工智能 开发者
技术之道:从迷茫到明晰的自我探索
在技术的海洋里,每位开发者都是在不断试错和成长的旅程中。本文通过个人经历,探讨了如何从初入职场的迷茫中找到自己的技术方向,并分享了持续学习和实践的重要性。
47 4
|
5月前
职场中的“奇葩”领导与同事:相处之道与成长之痛
职场中的“奇葩”领导与同事:相处之道与成长之痛
42 1
|
存储 人工智能 安全
程序员眼中的AIGC必杀技到底是什么?
众所周知,最近两年AI领域是互联网领域的流量密码,简直火的不能再火。而且跟着人工智能技术的迅猛发展的脚步,AIGC(全称为Artificial Intelligence Generated Content)在各个领域的应用也越来越广泛。但是,在AIGC产生的热度之下,它的相关技术能力还需要进一步精进。除了大模型、大数据和高算力,还需要一个稳定、高效、安全的数字基础设施,来支持其完成生成、存储和传输内容的整个过程,并尽可能避免重复建设、减少数据移动的工作量。以存储为代表的云计算基础设施作为算力底座,重要性日益凸显。面对“文生图”、“图生图”甚至期待出现的“文生音频、视频”跨维度、跨模态的能力,都
144 0
程序员眼中的AIGC必杀技到底是什么?
|
人工智能 自然语言处理 Java
程序员再过几年会没落?这是真的吗
《Computer World》杂志曾经写过一篇文章,说“编程到1960年就会消失”,因为IBM开发了一种新语言FORTRAN,这种新语言可以让工程师写出他们所需的数学公式,然后提交给计算机运行,所以编程就会终结。
|
文字识别 算法 NoSQL
读书分享:《程序员修炼之道:通向务实的最高境界》的思想经验
相较于全书众多的干货笔记,这篇文章是个别思想经验的总结,希望和大家交流。 ETC;DRY不仅限于编码;维护一个项目概念列表;帮助业务方理解他想要什么;防御性编程;继承税;学会沟通;小实验
读书分享:《程序员修炼之道:通向务实的最高境界》的思想经验
|
监控 druid 架构师
告别2021,迎接2022。你准备好了吗!
告别2021,迎接2022。你准备好了吗!
209 0
告别2021,迎接2022。你准备好了吗!
|
测试技术 程序员
风雨20年:我所积累的20条编程经验【转】
风雨20年:我所积累的20条编程经验Posted by zhaoxingyun on 十一月 13th, 2010 | Comments off原文作者乔纳森·丹尼可(Jonathan Danylko)是一位自由职业的web架构师和程序员,编程经验已超过20年,涉足领域有电子商务、生物技术、房地产、医疗、保险和公用事业。
831 1
|
程序员
【抛砖引玉】“技术顾问” —— 老程序员的一个出路。
     以前总可以看到一些讨论,程序员30岁以后怎么办?35岁以后怎么办?当然有一些人,不管大多的年龄,都可以继续编程。但是对于大多数人年龄大了,各方面的压力也就更大了。年龄大了就面临上有老下有小的处境,简单地说父母、爷爷奶奶病了要去照顾;孩子病了也要照顾;老婆病了也要照顾;自己病了还得自己照顾自己。
1331 0
|
架构师 程序员
论程序员的自我修养——我在阿里干了十年开发
究竟是努力重要,还是选择重要?资深阿里技术人毕玄师兄有着自己的见解。
2820 0
下一篇
DataWorks