一次繁杂问题的解决过程

起因:

刚入职新公司,接了一个小任务,说来简单,就是把项目里现在所有的埋点任务过滤一遍,以新发给我的一个Excel表格数据为准,没有在表格里出现的埋点key就删除掉。当我接到这个任务的时候,内心其实是有一点抗拒的,毕竟是毫无技术含量低工作,而且项目中那么多文件我总不能一个个文件一行行代码找吧?!幸好我被告知项目中所有埋点功能都是通过一个Log类中的add方法来实现的,那样我只要查找项目中调用了这两个方法的地方改就可以了。

过程:

熟知快捷键低我激动的做起来,首先先创建了一个分支,然后command+shift+R输入了关键字之后,让我的心又沉了下去。。。因为项目中调用使用埋点的地方一共有300多处,如果我一个个查找-复制key-到excel里查找-删除代码这一个套路下来,怎么也得两三天才能完成吧,这还不是问题所在,问题的关键在于。。我。。太。。懒。。了。。。程序员就是懒啊!

那怎么办?忘了是谁说过,对于程序员来说,所有机械性操作的问题,都不应该成为你的问题(我自己杜撰的),能不能写个脚本之类的,自动触发AS的查找快捷键,然后自动和excel进行比较呢?这个念头刚一出现就被我打消了,研究操作AS快捷键的脚本的这个调研过程+学习时间,也许一两天就过去了。那怎么办?

突然想到,为什么我一定要通过AS的快捷键来查找代码?我在文件里一个个查找不可以吗?这样我就可以通过代码来实现了。。思路应该谁正确的,话不多说,赶紧开始编码~

解决:

第一步,读取app项目下的java文件,然后一行行读取代码,发现包含Log的就读取其中的key,然后记录到一个set里(这样可以自动排重)

关键代码如下:

    */
 public void getCodeCount(String content) {
      Matcher matcher = pattern.matcher(content);
 content = matcher.replaceAll(" ");
 String ss[] = content.split("\n");
 for (String s : ss) {
         if (s.trim().length() > 0 && !s.trim().startsWith("//")){
//
 if (s.contains("TraceLog.add(\"")){
               s = s.trim();
 int firstIdx = s.indexOf("\"")+1;
 int lastIdx = s.indexOf("\"",firstIdx);
 String key = s.substring(firstIdx , lastIdx);
                  keyList.add(key);
            }
         }

      }
   }

第二步,读取excel里的key内容,保持到一个list里,

主要代码如下:

public static List readExcel(String filePath,int cellIdx){
   List<String> keyList = new ArrayList<>(400);
 Workbook book = null;
 try {
      book = getExcelWorkbook(filePath);
 Sheet sheet = getSheetByNum(book,1);
 System.out.println("sheet名称是:"+sheet.getSheetName());

 int lastRowNum = sheet.getLastRowNum();
 System.out.println("行数:"+lastRowNum);
 System.out.println("*********excel里的key如下**************");

 Row row = null;
 for(int i=1;i<=lastRowNum;i++){
         row = sheet.getRow(i);
 if(row != null){
            String v = row.getCell(cellIdx).getStringCellValue();
 keyList.add(v);

 }
      }
   } catch (Exception e) {
      e.printStackTrace();
 }

   return keyList;
}

第三步,两个集合差集,最后得到不在excel里的key共有25个。

以上是我这次任务的解决过程,如果大家有更好的方法,也请多多指教。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值