Java正则表达式检查程序无法正常工作

时间:2013-12-07 03:34:26

标签: 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,matcher.find()也会设置为true。然后,每个输出的结果将产生与输入相同的值。

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

1 个答案:

答案 0 :(得分: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.
}