我在IntelliJ IDEA中执行了代码分析器,它显示弱警告为
重复范围可替换为“ *”
它在我使用正则表达式模式的代码行下方显示警告
String pattern = prefix + ".{" + length + "}" + suffix;
我不确定替换.{
为后我的代码是否能正常工作*
代码的简化版本:
String code = "AUTONARNDATEST";
String prefix = "AUTO";
String suffix = "TEST";
String length = "6";
String pattern = prefix + ".{" + length + "}" + suffix;
if(code.matches(pattern)) {
System.out.println("thumbs_up");
}else {
System.out.println("thumbs_down");
}
谁能帮忙。
该问题是由Intellij IDEA中的分析器引起的。这是相关的部分:
@Override
public void visitRegExpQuantifier(RegExpQuantifier quantifier) {
if (quantifier.isCounted()) {
final RegExpNumber minElement = quantifier.getMin();
final String min = minElement == null ? "" : minElement.getText();
final RegExpNumber maxElement = quantifier.getMax();
final String max = maxElement == null ? "" : maxElement.getText();
if (!max.isEmpty() && max.equals(min)) {
...........
}
else if (("0".equals(min) || min.isEmpty()) && "1".equals(max)) {
..........
}
else if (("0".equals(min) || min.isEmpty()) && max.isEmpty()) {
myHolder.newAnnotation(HighlightSeverity.WEAK_WARNING, RegExpBundle.message("weak.warning.repetition.range.replaceable.by.0", "*"))
.withFix(new SimplifyQuantifierAction(quantifier, "*")).create();
}
...........
在这种情况下,它会看到字符串.{
,并将其解释为量词,且两者都为min
,max
范围为空,因为它不能静态解析内容,length
并且minElement / maxElement.getText()返回null。因此,它落在产生警告的分支上。如果IDEA可以静态解析length
,则不会出现警告:
String length = "6";
String pattern = ".{" + length + "}"; // No warning
if ("a".matches(pattern)) ;
与之比较:
String length = new Scanner(System.in).nextLine();
String pattern = ".{" + length + "}"; // Warning, cannot statically parse length
if ("a".matches(pattern)) ;
正如我在评论中提到的,如果使用String.format生成模式,则可以避免这种情况:
String pattern = String.format("%s.{%s}%s", prefix, length, suffix);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句