用“ *”替换的重复范围是什么意思?

NarendraR:

我在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();
      }
       ...........

在这种情况下,它会看到字符串.{,并将其解释为量词,且两者都为minmax范围为空,因为它不能静态解析内容,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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

``''是什么意思?为什么有用?

有什么用!在 Python 中是什么意思?

用大括号括起来的struct是什么意思?

用C ++代码返回对象是什么意思?

用var声明struct是什么意思?

用Java进行转换-(父)这是什么意思?

用+(加号)启动PowerShell One衬里是什么意思

Java:用char减去char是什么意思?

Python help():用`*`跨越参数是什么意思?

用C进行联合后的“ ++”是什么意思?

用外行术语来说,“后备对象”是什么意思?

unix shell 脚本- jot -r 1 1 4 是什么意思?我可以用 seq 替换 jot 吗?

TypeScript 中的“as const”是什么意思,它的用例是什么?

ActivityManager中的奇怪函数:isUserAMonkey。这是什么意思,有什么用?

PostgreSql中回滚是什么意思,什么时候用?

While循环用空的身体检查volatile整数-这是什么意思?

“用另一个证书签名证书”是什么意思?

用大写字母初始化是什么意思?

用 `val myVal: (long: Long) -> Unit)` 初始化字段是什么意思?

用[]印刷的ps进程名称(例如[cgroup])是什么意思?

Hibernate Entitymanager-“已弃用-改用hibernate-core”是什么意思?

“ 1位1200 dpi”是什么意思?用ggsave在R中保存图1位

用NLP /概率/ ML表示法:字母上的波浪号是什么意思?

用Qt / QML绘制图像是什么意思?

用RC4解密时,跳过字节是什么意思?

如果不是用编程语言来实现,那么“系统调用”是什么意思?

我可以用sed实现这种替代吗?(未知命令“ +”是什么意思)

用外行术语来说,Java中的“静态”是什么意思?

用delve调试Go软件包时,<autogenic>:1是什么意思?