【发布时间】:2015-12-28 04:56:15
【问题描述】:
我的课堂上到处都是这样的代码:
if (src.getTYPERECORD().getACT().equalsIgnoreCase("B"))
现在,如果 getter 返回 null,它可能会崩溃,为了团队的最佳实践,我被要求将其转换为:
if ("B".equalsIgnoreCase(src.getTYPERECORD().getACT()))
我想出了以下正则表达式来搜索更简单的情况,即我已经将值分配给了诸如 act.equalsIgnoreCase("B") 之类的变量:
(\w*).equalsIgnoreCase\("(\w*)"\)
替换为:
"\2".equalsIgnoreCase(\1)
除了上面提到的情况外,还有这个:
tos.substring(1,1).equalsIgnoreCase("A")
您能帮忙想出搜索和替换正则表达式来捕捉上面提到的两个例子吗? 它需要考虑开始 IF 括号相邻的情况,以及存在类似 if ( src.... 或 if (src....
谢谢!
【问题讨论】:
-
"something".equals(something)可能会隐藏错误。我讨厌这种方法,我更喜欢单独处理null。 -
嵌套的可能性表明这个任务不应该用正则表达式来完成,而应该用解析器来完成。
-
@Pshemo - 解析器是什么意思?你能给我推荐一个合适的吗?或者你建议我怎么做?
-
@MarounMaroun - 我也不喜欢这种方法,但这是团队负责人所要求的,以及其余代码的编写方式,不可协商,他们称之为“最佳实践”呵呵
-
如果你想找到像
foo.bar().baz.equals("someString")这样的部分,那么我们可以在这里尝试正则表达式(例如,因为"abc"+"bar"或"abc\"def"这样的字符串,这并不容易,但它可能是可能的正则表达式)。但是,如果您的代码将在(..)中包含嵌套表达式(如foo.bar(someExpression(otherExpression())).baz.equals("someString")),问题就开始了,因为 Java 不允许在正则表达式引擎中进行递归,而 Eclipse 是用 Java 编写的。
标签: java regex eclipse replace