我希望所有复选框变量都以"ckx"开头。
^.*JCheckBox((?! ckx).)*$
这适用于变量声明,但也匹配定义。例如
ckxSomeCheckbox = new JCheckBox();
知道如何防止此代码显示为错误吗?
有效示例:
private JCheckBox ckxTest = new JCheckBox();
public javax.swing.JCheckBox ckxTest;
无效示例:
private JCheckBox abcTest;
private JCheckBox abcckxTest;
ckxTest = new JCheckBox();
ckxTest = new JCheckBox("");
我建议使用RegexpMultiline检查,这样可以发现人们在不方便的地方插入换行符的情况。
正则表达式将是bJCheckBoxbs*(?!ckx[A-Z])w+
(解释/示例(。
<module name="RegexpMultiline">
<property name="format" value="bJCheckBoxbs*(?!ckx[A-Z])w+"/>
<property name="message" value="Missing prefix 'ckx' on checkbox variable"/>
<property name="fileExtensions" value="java"/>
</module>
请注意,我去掉了错误标识符位于行开头的行,因为这些行不会编译。除非您已经提前声明了变量,否则在这种情况下,这将是标记问题的地方。
ckxTest = new JCheckBox();
ckxTest = new JCheckBox("");
用正则表达式检查这一点并不完美,因为人们可能会使用注释或子类来混淆检测器。因此,使用PMD XPath规则或其他方法将是一种更强大的方法,但这是另一个问题。:-(
使用RegexpSinglelineJava也可以实现同样的效果,它增加了忽略注释的功能,但会因意外的换行而脱轨:
<module name="RegexpSinglelineJava">
<property name="format" value="bJCheckBoxbs*(?!ckx[A-Z])w+"/>
<property name="message" value="Missing prefix 'ckx' on checkbox variable"/>
<property name="ignoreComments" value="true"/>
</module>