gpt4 book ai didi

java - 使用 replaceAll 和 replaceFirst 方法时如何修复 "Refactor this code to use a "static final"Pattern"

转载 作者:行者123 更新时间:2023-12-04 01:23:14 26 4
gpt4 key购买 nike

对于代码下面的代码, Sonar 中显示提示:

Refactor this code to use a "static final" Pattern.

我不明白,这是什么问题。 Sonar 中也没有明确解释。

请帮帮我。

public Boolean validateLabelText(String labelValue, String fieldCell) {
return labelValue
.replaceAll(StringUtils.SPACE, StringUtils.EMPTY)
.equalsIgnoreCase(fieldCell.replaceAll(StringUtils.SPACE, StringUtils.EMPTY)
.replaceFirst(StringUtils.LF, StringUtils.EMPTY));
}

最佳答案

Refactor this code to use a "static final" Pattern.

您遇到了以下问题:Regex patterns should not be created needlessly .

问题是由这些操作引起的:

.replaceAll(StringUtils.SPACE, StringUtils.EMPTY)
.replaceFirst(StringUtils.LF, StringUtils.EMPTY)

这两种方法都会创建 java.util.regex.Pattern 类的新实例。这意味着当您的方法执行 100 次时,您的代码将创建 300 个 Pattern 对象。该规则告知您不应这样做,因为 Pattern 是重对象,您可以使用更高效的代码。

如果StringUtilsorg.apache.commons.lang3.StringUtils那么解决方法如下。

在第一次操作中

.replaceAll(StringUtils.SPACE, StringUtils.EMPTY)

您想用 ""(空)替换所有出现的 ""(空格)。此代码应更改为:

.replace(StringUtils.SPACE, StringUtils.EMPTY)

replace 方法按原样替换文字。 replaceAll 将第一个参数视为正则表达式。将空格字符解析为正则表达式是没有意义的,因为输出将完全相同。

下一个

.replaceFirst(StringUtils.LF, StringUtils.EMPTY)

您总是从 StringUtils.LF 创建一个新的 Pattern 对象。不要每次都创建一个新模式,您应该编译一次并在下次重用它:

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);
}

我不知道你的代码的业务逻辑是什么,所以我将变量命名为value1value2(我不知道哪个值是currentexpected)。

关于java - 使用 replaceAll 和 replaceFirst 方法时如何修复 "Refactor this code to use a "static final"Pattern",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62306452/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com