无法运行正则表达式程序

时间:2019-02-06 17:25:19

标签: java

import java.util.Scanner;

public class VerifySerialBayneHarris {

  public static void main(String[] args) {

    Scanner input=new Scanner(System.in);
    String text;
    String cha;


    System.out.println("Enter a Serial number: ");
    text=input.nextLine();

    if(text.matches("[^-](?!.*--)[A-Za-z0-9-]+[^-]"));{
      System.out.println("Serial number "+text+" verification \nValid");
      System.out.println("Enter a wildchar character: ");
      cha=input.nextLine();
      text= text.replaceAll("[A-Za-z0-9]", cha);
    }

    if(text.matches("[^A-Za-z0-9-]+"));
    System.out.println("Only uppercase , lowercase letters, dashes and numbers are allowed.It should have exactly 2 non-consecutive dashes in the middle. ");
  }
}

到目前为止,这是我所拥有的,但是我一直在运行两个表达式,而不是一个或另一个。一定有我想念的东西。预先感谢。

这是我的指导原则: 提示用户根据以下规则输入序列号:

  • 仅允许使用大写和小写字母,破折号和数字。

  • 中间应该恰好有2个非连续的破折号。

您的程序应验证序列号是否有效,如果是,请提示用户输入通配符。然后,应使用通配符将所有字符(除破折号之外的字符)屏蔽掉,从而显示隐藏的序列号

[应该是什么样的代码]

[1]: https://i.stack.imgur.com/xoGke.jpg

2 个答案:

答案 0 :(得分:1)

在这里摆脱分号...

if(text.matches("[^-](?!.*--)[A-Za-z0-9-]+[^-]"));{ << HERE

...and...

if(text.matches("[^A-Za-z0-9-]+")); << HERE

您的块始终处于执行状态,因为由于这个原因,if语句有一个空块。

答案 1 :(得分:0)

如果您的角色类别中有减号,那么它应该是第一个:

[A-Za-z0-9-]为[-A-Za-z0-9]

但是我不会在组中包括-并将模式写为:[A-Za-z0-9] +(-[A-Za-z0-9] +){2}

或使用POSIX:\ p {Alnum} +(-p {Alnum} +){2}

如果要访问3个段:(\ p {Alnum} +)-(\ p {Alnum})-(\ p {Alnum})