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

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



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到}号之前的(不包括}),第二个是异常变量名,第三个是"}"号到行首的空格


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

<span style="font-size:32px;">$1 $3    throw new MyException($2);\n$3}</span>

替换结果如下


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,也不是所有的异常都要替换,需要看实际情况需要替换的自行替换。


转载请注明出处,谢谢

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值