我目前是第一次使用Checkstyle,但遇到了一些问题。
我希望checkstyle验证包声明和后续内容之间是否有确切的空白行。
我找不到提供这种验证的模块,或者至少没有一个模块也不会检查软件包声明和上面的内容之间是否有空白行。

因此,我决定使用regexp-module并编写一个正则表达式来实现这种验证。我试图涵盖我的规则的所有可能的缺陷,并且在一些在线验证器中可以尝试使用正则表达式,而这毫无问题。

这是正则表达式:

.+package.*;|package.*;.*\S|package.*;.*[\r\n].*\S|package.*;[\r\n]{3,}


现在,当我尝试将其导入我的检查配置中时,总是会收到消息
即使代码正确也违反了我的规则。

下面是一些示例代码:

package just.some.package;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Query;
...


通常,此代码不应触发任何问题,但只要在IDE中的checkstyle插件中尝试它,它便会始终执行。引起问题的regexp的代码片段似乎是这样的:

package.*;(\r|\n){3,}


它应该只检查包声明后是否有两个以上的换行符,但如果示例中恰好有两个,则它也会触发错误。

有人可以解释我的问题是什么吗?

最诚挚的问候

德姆利

最佳答案

您可以使用\R construct匹配换行符,

package.*;\R{3,}


[\r\n]{3,}(\r|\n){3,}都匹配,因为您有CRLF结尾,这意味着两行之间用空行分隔4个CR / LF字符。

或者,如果您使用Windows行尾样式,则可以指定(?:\r\n){3,}模式。

关于java - 正则表达式可用于在线 validator ,但在Java Checkstyle中失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50949562/

10-10 05:53
查看更多