重构此代码以使用“静态最终”模式。
您遇到了以下问题:Regex 模式不应该被不必要地创建。
问题是由以下操作引起的:
.replaceAll(StringUtils.SPACE, StringUtils.EMPTY)
.replaceFirst(StringUtils.LF, StringUtils.EMPTY)
这两种方法都创建了java.util.regex.Pattern类的新实例。这意味着当您的方法执行 100 次时,您的代码会创建 300 个Pattern对象。该规则告知您不应该这样做,因为Pattern这些对象很重,您可以使用更高效的代码。
如果StringUtils是org.apache.commons.lang3.StringUtils,则解决方案如下。
在第一次操作中
.replaceAll(StringUtils.SPACE, StringUtils.EMPTY)
您想" "用(空)替换所有出现的(空格"")。此代码应更改为:
.replace(StringUtils.SPACE, StringUtils.EMPTY)
该replace方法按原样替换文字。replaceAll将第一个参数视为正则表达式。将空格字符解析为正则表达式是没有意义的,因为输出将完全相同。
下一个
.replaceFirst(StringUtils.LF, StringUtils.EMPTY)
你总是Pattern从StringUtils.LF. 与其每次都创建一个新模式,不如先编译一次,然后再重用它:
private static final Pattern LF_PATTERN = Pattern.compile(StringUtils.LF, Pattern.LITERAL);
LF_PATTERN.matcher(string).replaceFirst(replacement);
最终代码应如下所示:
private static final Pattern LF_PATTERN = Pattern.compile(StringUtils.LF, Pattern.LITERAL);
public Boolean validateLabelText(String labelValue, String fieldCell) {
String value1 = labelValue.replace(StringUtils.SPACE, StringUtils.EMPTY);
String value2 = fieldCell.replace(StringUtils.SPACE, StringUtils.EMPTY);
value2 = LF_PATTERN.matcher(value2).replaceFirst(StringUtils.EMPTY);
return value1.equalsIgnoreCase(value2);
}
我不知道你的代码的业务逻辑是什么,所以我将变量命名为value1and value2(我不知道哪个值是current哪个expected)。