Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 重复范围由'*';什么意思?_Java_Intellij Idea - Fatal编程技术网

Java 重复范围由'*';什么意思?

Java 重复范围由'*';什么意思?,java,intellij-idea,Java,Intellij Idea,我在IntelliJ IDEA中执行了代码分析器,它显示弱警告,如下所示: 重复范围可由“*”替换 它在我使用正则表达式模式的代码行下方显示警告 String pattern = prefix + ".{" + length + "}" + suffix; 我不确定我的代码在用*替换{后是否能工作 代码的简化版本: String code = "AUTONARNDATEST"; String prefix = "AUTO"; String suffix = "TEST"; String le

我在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中的analyzer引起的。以下是相关部分:

  @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可以静态解析
长度
,则警告不会出现:

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

无法复制。您能提供一个警告吗?您知道
*
{10}
(或任意长度)相对的作用吗?该警告绝对不正确。您需要一定数量的“任意字符”.My$0.02:代码分析器要么混乱,要么过于谨慎,或者两者兼而有之。您知道自己做的事情是正确的(;->),所以请忽略警告并继续。如果您执行
String pattern=String.format(“%s.{%s}%s”,前缀、长度、后缀);