当前位置: 首页 > 知识库问答 >
问题:

爪哇车辆登记号码验证器[副本]

都博裕
2023-03-14
PPXXQQYYYY
PP - Should be either KA or DL
XX - Number from 01 to 10
QQ - 1 or 2 alphabets from A-Z(uppercase)
YYYY - Number from 1000 to 9999 
Ex: KA01MG2323, DL10G5454

Method should return 1, if the registration number is valid, and last 4 digits add up to a lucky number. 
When last 4 digits are repeatedly added(see below) and the sum is 6, it is a lucky number
KA01MG8484
8+4+8+4 = 24 -> 2 + 4 = 6 (Lucky number)
if the input string is empty or null, the method should return -1.
Accept Registration number from the console
If the Registration number is invalid, display Invalid registration number
If the Registration number is valid but not lucky, display Valid registration number
If the Registration number is valid and lucky, display Lucky registration number

我试过这个密码。

import java.util.*;
import java.util.regex.*;
class Source
{
    static int checkRegistrationNumber(String st){
        String regex= "[(KA)(DL)][(0[1-9])(10)][A-Z]{1,2}[1-9]\\d{3}";
        Pattern p=Pattern.compile(regex);
        Matcher m = p.matcher(st);
        if(m.find()){
             String lastfour="";
             lastfour = st.substring(st.length()-4);
             int a = Integer.parseInt(lastfour);
             int[] arr = new int[10];
             int u = 1000;
             for(int i=0;i<4;i++){
                  arr[i] =a/u;
                  a=a%u;
                  u=u/10;
             }
             int sum;
             sum=arr[0]+arr[1]+arr[2]+arr[3];
             if(sum>10){
                 int sum1=sum/10;
                 int sum2=sum%10;
                 int sum3= sum1+sum2;
                 if(sum3==6){
                    return 1;
                 }
                 else {
                    return 0;
                 }
           }
           else if(sum==6){
               return 1;
            }
        else{
            return 0;
        }
 }
 else{
    return -1;
 }
 }
 public static void main(String[] args)
{
    Scanner sc =new Scanner(System.in);
    String str=sc.nextLine();
    int n=checkRegistrationNumber(str);
    if(n==1){
        System.out.println("Lucky registration number");
    }
    else if(n==0){
        System.out.println("Valid registration number");
    }
    else{
        System.out.println("Invalid registration number");
    }
 }
}

但在检查DL10G4839时,即使是幸运标志,也显示无效。号码。它不能正常工作。

共有1个答案

彭梓
2023-03-14

您的正则表达式是错误的!

如果要检查本练习中的约束,则应使用以下regex:

"^(KA|DL)(10|0[1-9])([A-Z]{1,2})([1-9][0-9]{3})$"

说明:

^ # start of the string
( # open first group
KA|DL # find KA or DL
) # close first group
( # second group
10| # 10 literally or
0[1-9] # numbers from 01 to 09
) # close second group
( # third group
[A-Z]{1,2} # one or two A-Z (uppercase)
) # close third group
( # open fourth group
[1-9][0-9]{3} # numbers from 1000 to 9999
) # close fourth group
$ # end of the string
"^(?:KA|DL)(?:10|0[1-9])[A-Z]{1,2}[1-9][0-9]{3}$"
 类似资料:
  • 在我的spring-boot服务中,我使用https://github.com/java-json-tools/json-patch用于处理PATCH请求。 一切似乎都很好,除了一种避免修改不可变字段的方法,如对象ID、creation_time等。我在Github上发现了一个类似的问题https://github.com/java-json-tools/json-patch/issues/21我

  • 我正在阅读一些Java API文档,我遇到了一个非常奇怪的活泼的循环,这让我兴高采烈地来到这里并询问它是关于什么的。很高兴能尽快找到它。感谢你即将做出的努力。

  • 目前我正在开发一个应用程序,允许用户创建一个模板并将其生成为DOCX文件。应用程序需要能够在用户创建模板时向用户显示模板中的更改。 我尝试的方法是使用DOCX4J库(允许操作DOCX文件)和ICEPDF,后者主要用于通过将DOCX首先转换为PDF文件来将其显示到swing组件中。现在,这种方法的问题是加载速度非常慢,DOCX文件中发生的一些更改没有反映在PDF转换中(例如:虚线下划线、字体更改)。

  • 我想知道的用途?在java泛型中。通过研究占位符T和通配符?,我想知道?,浏览了几个网站/网页和书籍,但没有理解它。所以我创建了下面的类来研究这些差异。 null

  • 问题内容: 我有这个Java代码段。我是Java的菜鸟。 错误: 码: 问题答案: 是的,这是问题所在: 在课程的最高级别,您只能拥有: 实例初始化程序块() 静态初始值设定块() 变量声明 构造函数声明 方法声明 嵌套类型声明 终结器声明 这些都不是。如果你 的意思 来声明一个变量,你应该这样做: 如果这 不是 您想要的,则应解释您的意图。 编辑:修复此问题后,此编译器错误似乎很明显: Conf

  • 我已经红色了多篇文章和讨论,但我仍然有一些不确定性:我不确定是否应该使用或任何其他类型来存储预订-在“在线预订”的意义上(因此来自不同国家/时区的参与者需要在时间线上的同一时刻会面)。我倾向于使用,因为DB和Backend设置为UTC,并且由于传入的“创建预订”json消息包含ISO 8601(带偏移量)start DateTime 让我们采用以下设置:1.数据库(UTC、Oracle、MSSQL