首页 > 解决方案 > 需要为字符串文字定义一个常量[SonarQube Smell]

问题描述

我需要从从 JSP 获得的字符串中删除多余的空格。在调用 setter 方法之前,我使用以下内容删除空格:

class_name=class_name.replaceAll("\\s{2,}", " ").trim();

声纳扫描给我气味说明定义一个常量而不是使用文字。如何将replaceAll参数中的内容放在一个常量中?并使用该常数作为参数。

声纳扫描结果:- 定义一个常量而不是使用这个 "\s{2,}" 文字 8 次。

标签: javaregexsonarqube

解决方案


为字符串文字(有时是原始文字)定义常量并不总是有帮助的。

在这种情况下,很难知道我会怎样称呼这个常量,这样它才有意义且更具可读性;并且您可能会被鼓励对两个参数执行相同的操作:

class_name.replaceAll(TWO_OR_MORE_SPACES_PATTERN, ONE_SPACE_REPLACEMENT).trim()

真的更好吗?我会说不是。

如果问题是您在很多地方使用相同的替换/修剪逻辑,请定义一个方法:

static String replaceSpacesAndStrip(String className) {
  return className.replaceAll("\\s{2,}", " ").trim();
}

然后调用:

class_name = replaceSpacesAndStrip(class_name);

推荐阅读