正则表达式匹配被忽略的异常

在软件开发中可能会有一些异常,因为开发习惯问题导致异常未被正确处理,只是打印了日志:



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


这样的代码在运行时出现异常很难被定位。

现在可以用以下正则表达式来查询类似的异常处理:


(catch\s*\([a-z|0-9 ]+\s+([a-z][0-9a-z_]*)\s*\)\s*(?:\s*//[^\n]*?\n)*\s*\{[\s]*?(?:\s*//[^\n]*?\n)*\s*(?:(?:(?:\s*//[^\n]*?\n)*\s*MyLog\.|LogUtil|android.util.Log|Log\.|[a-z]+.printStackTrace)[^;\n]*?;\s*?(?:\s*//[^\n]*?\n)*)*\s*)(?<=\n)(\s*)\}
 
  


该正则支持匹配以下异常处理(Android Studio 2.1中测试通过)
catch(Exception e )//空内容  {

            }
            catch(Exception e)//仅注释,只支持单行注释  {
//sdfaf  //  }
            catch (Exception e) {//自定义写日志  Log.e("xxx");  }
            catch (Exception e) {//默认日志  e.printStackTrace();//默认日志  }
            catch (Exception e) {//多个写日志组合  e.printStackTrace();  MyLog.e("连接云服务端异常");  }
            catch (Exception e) {//日志+注释  //12  Log.e("TAG","连接云服务端异常");  //  }
            catch (Exception eee) //日志+注释  {
                //sd  eee.printStackTrace();  //sdfsdfs  }
            catch (Exception e){//大量单行注释  //sdfsdf  //sdfsdf  e.printStackTrace();  //sdfsdfsd  //sdfsdfsd  MyLog.e("连接云服务端异常");  //sdfsdf  //sdfsdf  }
            catch (NullPointerException | IllegalArgumentException e){//多异常同时处理  //sdfsdf  e.printStackTrace();  //sdfsdfsd  MyLog.e("连接云服务端异常");  //sdfsdf  }

正则表达式中一共三个捕获组,第一个是catch到}号之前的(不包括}),第二个是异常变量名,第三个是"}"号到行首的空格


所以根据配置组可以把这些异常处理更新为需要的异常处理,例如查找替换为:

$1 $3    throw new MyException($2);\n$3}

替换结果如下


catch(Exception e )//空内容  {

                 throw new MyException(e);  }
            catch(Exception e)//仅注释,只支持单行注释  {
//sdfaf  //  throw new MyException(e);  }
            catch (Exception e) {//自定义写日志  Log.e("xxx");  throw new MyException(e);  }
            catch (Exception e) {//默认日志  e.printStackTrace();//默认日志  throw new MyException(e);  }
            catch (Exception e) {//多个写日志组合  e.printStackTrace();  MyLog.e("连接云服务端异常");  throw new MyException(e);  }
            catch (Exception e) {//日志+注释  //12  Log.e("TAG","连接云服务端异常");  //  throw new MyException(e);  }
            catch (Exception eee) //日志+注释  {
                //sd  eee.printStackTrace();  //sdfsdfs  throw new MyException(eee);  }
            catch (Exception e){//大量单行注释  //sdfsdf  //sdfsdf  e.printStackTrace();  //sdfsdfsd  //sdfsdfsd  MyLog.e("连接云服务端异常");  //sdfsdf  //sdfsdf  throw new MyException(e);  }
            catch (NullPointerException | IllegalArgumentException e){//多异常同时处理  //sdfsdf  e.printStackTrace();  //sdfsdfsd  MyLog.e("连接云服务端异常");  //sdfsdf  throw new MyException(e);  }

这个只是一个DEMO,也不是所有的异常都要替换,需要看实际情况需要替换的自行替换。


转载请注明出处,谢谢

你可能感兴趣的:(Java,Android)