tangguo

Java正则表达式检查器不起作用

java

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Sort
{
  public static void main(String[] args)
  {
    Scanner input = new Scanner(System.in);
    Boolean checker = false;
    String regex = "^(?:([0-9])(?!.*\1))*$";
    Pattern pattern = Pattern.compile(regex,Pattern.CASE_INSENSITIVE);

    System.out.println("Enter the Year:");
    String number = input.next();
    int year = Integer.valueOf(number);

    Matcher matcher;
    while(!checker) {
    matcher = pattern.matcher(number);
    if(matcher.find())
        checker = true;
    else
        year++;
        number = Integer.toString(year);
  }
  System.out.println(number);

 } 
}

我和我的朋友正在尝试创建一种算法来计算输入的数字之后不会重复的数字(例如input: 1000 output: 1023)。

感兴趣的代码是:

    Matcher matcher;
    while(!checker) {
    matcher = pattern.matcher(number);
    if(matcher.find())
        checker = true;
    else
        year++;
        number = Integer.toString(year);
  }

由于某种原因,checker即使将其设置为false,也将其设置为true matcher.find()。每个输出的结果将与输入具有相同的值。

这是什么问题,我们将如何更改逻辑,以便当数字中的数字重复时,检查器返回假?


阅读 337

收藏
2020-11-20

共1个答案

小编典典

考虑这些行

 if(matcher.find())
   checker = true;
 else
   year++;
   number = Integer.toString(year);

有一些问题。我认为您缺少牙套。和你忘了更新checker的时候matcher.find()是假的。我建议你改为这样做

checker = matcher.find();
if (!checker) { // checker is not true... e.g. checker == false.
  year++;
  number = Integer.toString(year); // I assume you wanted this here.
}
2020-11-20