从for循环块中删除代码语句......
for( UIComponent currentMenuItemComponent : menuBarComponent.getChildren() ) {
String style = "";
String selectedViewName = ( String )currentMenuItemComponent.getAttributes().get( ATTRIBUTE_View );
logger.info( "Value of selectedViewName =" + selectedViewName );
if( selectedViewName.equals( targetView ) ) {
style = "selected";
logger.info( "Value of style =" + style );
}
我想从for循环块中删除logger.info
语句。这可能吗?
我已经使用了表达式
(if|else)(.*)(\r?\n)([\s-]*)(logger.info)(\( \")(.*)(\" \);)
从Notepad ++中的if语句中删除它们。我正在寻找一种从 for 块
中移除的方法更新:如果有可能,请使用python脚本帮助我。
答案 0 :(得分:1)
这是正则表达式无法做到的,至少不是Notepad ++的正则表达式引擎。
请考虑以下事项:
for (...)
{
foo();
logger.info(baz)
if (bar())
{
logger.info(spam)
}
logger.info(ham)
}
您需要以递归方式跟踪程序当前所在的大括号{...}
的嵌套级别,以确定是否有logger.info()
属于正确的块。大多数正则表达式引擎都无法处理递归。
即使您使用的是(如.NET),它仍然是一场噩梦。想象一下:
for (...)
{
foo();
logger.info(baz)
// if (bar())
// {
if (badabing()) {
logger.info(spam)
}
logger.info(ham)
}
现在尝试跟踪嵌套...
答案 1 :(得分:1)
这与您在此处System.out.println
找到的其他问题非常相似:Remove System.out statements from For Loops blocks only。
参考my answer,唯一的区别是PMD查询不同。这是新的:
//ForStatement/Statement/descendant-or-self::
Statement[./StatementExpression/PrimaryExpression/PrimaryPrefix/Name[@Image="logger.info"]]
在我的回答中替换<![CDATA[ ... ]]>
中custom.xml
元素中的其他查询。所有其他步骤都是一样的。