当前位置: 首页 > 面试题库 >

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

戚宏扬
2023-03-14
问题内容
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()。每个输出的结果将与输入具有相同的值。

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


问题答案:

考虑这些行

 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.
}


 类似资料:
  • 问题内容: 我有一个正则表达式: 这应该与该字符串匹配并返回三个捕获(根据Rubular) 这是我的代码: 当有三个时,此打印输出1(组),所以我只能这样做,只会返回32。 问题答案: 调用查找匹配的 下一个 实例,如果没有更多实例,则返回false。尝试调用它三次,看看是否有所有预期的组。 为了澄清,正在尝试 在正则表达式中 找到第一个组 表达式 。您的正则表达式中只有一个这样的组表达式,因此永

  • 问题内容: 代码: 错误: 我在这里做错了什么? 问题答案: 你需要调用的,然后才能调用和相关的功能,大约匹配的文本查询或操纵它(,,等)。 因此,在您的情况下: 这将找到第 一个 匹配项(如果有),并提取由正则表达式匹配的第一个捕获组。如果要在输入字符串中查找所有匹配项,请更改为循环。

  • 问题内容: 我正在尝试使用以下程序使用正则表达式删除字符串中的某些单词。它可以正确删除,但只考虑大小写。如何使其不区分大小写。我坚持使用方法,但是没有用。 输出: 问题答案: 您需要将模式中要区分大小写的部分放在 前面 : 看见 我已将要删除的关键字周围的空格替换为单词边界()。之所以出现问题,是因为可能有两个关键字一个接一个地被一个空格隔开。 如果仅当关键字被 空格 包围时才想删除它们,则可以使

  • 我要匹配以下字符串: 包含unicode空格(不要问我为什么)<代码>/,\s*,/u在regex101中工作正常。 但是(?u),\s*,“在clojure中不起作用: 为什么会失败?

  • 我需要一个正则表达式来检查和删除< code > membership user < code > userName 中的特殊字符。 当我第一次将网站设置为测试版时,我没有考虑到特殊字符不是获取用户名的好方法,“在我的应用程序中”。 下面我有一段模板代码,写得不太正确,但是给了愿意帮助的人一个好的开始。 --我需要从用户名中删除所有特殊字符和空格,同时更新用户名。 当我说我所说的特殊字符~、`、!

  • 问题内容: 我写了一个正则表达式来从HTML提取字符串,但是多行标志似乎不起作用。 这是我的模式,我想在标签中获取文本。 我创建了一个字符串来测试它。当字符串包含“ \ n”时,结果始终为null。如果删除所有的“ \ n”,无论有没有标志,它都会给我正确的结果。 我的正则表达式怎么了? 问题答案: 您正在寻找修饰符,也称为 dotall 修饰符。它将强制点也匹配换行符,默认情况下 不这样做 。