检测Java变量名是否合法

编写程序检验Java变量的合法性。程序对用户输入的变量进行检验,做出如下判断:
(1)illegal;(2)legal,butusespoorstyle;(3)professional。具体标准如下。
用户输入‘q’,程序结束。
legal的判断标准:
-只包含字母、数字、_和$符号。
-只能以字母、_或者$开始。
-不能以数字开始。
-不能是关键字。
Professional的判断标准:
-合法的
-只使用数字和字母
-第一个字母是小写字母
(示例)
This program checks the properness of a given Java variable name
Enter a variable name (q to quit): streetAddress2 Professional!
Enter a variable name (q to quit): street address2 Illegal.
Enter a variable name (q to quit): StreetAddress2 Legal,butusespoorstyle.
Enter a variable name (q to quit): 2ndStreetAddress Illegal.
Enter a variable name (q to quit): street$address$2 Legal,butusespoorstyle.
Enter a variable name (q to quit): q

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

public class Test {

    public static void main(String[] args) {
        
        //关键字列举数组
        String[] keyWords = new String[]{"class", "interface", "public", "extends", "private", "protect", "while", "if", "for", "abstract", "final"};
        
        Scanner sc = new Scanner(System.in);
        boolean flag = true;
        while(flag) {
            System.out.print("Enter a variable name (q to quit):");
            String str = sc.nextLine();
            if("q".equals(str)) {
                //如果输入的是q,终止循环
                flag = false;
                break;
            }
            if("".equals(str) || str == null) {
                System.out.println("legal");
            }else {
                //输入的不是q,开始校验
                String rexOne = "[a-zA-Z]";
                String rexTwo = "[0-9]";
                String rexThree = "[_$]";
                String rexFour = "[a-z]";
                if(str.replaceAll(rexOne, "").replaceAll(rexTwo, "").replaceAll(rexThree, "").length() > 0) {
                    //判断是否有除了字母,数字,_$之外的内容
                    System.out.println("legal,but uses poor style");
                }else {
                    //判断是否是以数字开头
                    String firstStr = str.substring(0, 1);
                    if(Pattern.compile(rexTwo).matcher(firstStr).find()) {
                        System.out.println("legal,but uses poor style");
                    }else if(Arrays.asList(keyWords).contains(str)){
                        System.out.println("legal,but uses poor style");
                    }else {
                        if(str.replaceAll(rexOne, "").replaceAll(rexTwo, "").length() == 0 && Pattern.compile(rexFour).matcher(firstStr).find()) {
                            System.out.println("professional");
                        }else {
                            System.out.println("legal");
                        }
                    }
                }
            }
        }
        
    }
    
}
package com.example.demo;

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

public class Test {
    public static Pattern pattern = Pattern.compile("^[a-zA-Z_$][\\da-zA-Z_$]*");
    private static String[] keyWords = "abstract,default,goto,switch,boolean,do,if,package,synchronized,break,double,implements,private,this,byte,else,import,protected,throw,throws,case,extends,instanceof,public,transient,catch,int,return,char,final,interface,short,try,class,finally,long,static,void,const,float,native,strictfp,volatile,continue,for,new,super,while,assert,enum".split(",");

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Enter a variable name (q to quit): ");
        while (true) {
            String input = scanner.nextLine();
            if (input == null || "".equals(input)) {
                continue;
            }
            if ("q".equals(input)) {
                break;
            }
            System.out.print("Enter a variable name (q to quit): ");
            if (!pattern.matcher(input).matches()) {
                System.out.println(input + " Illegal ");
                System.out.print("Enter a variable name (q to quit): ");
            }
            if (Arrays.stream(keyWords).anyMatch(input::equals)) {
                System.out.println(input + " Illegal ");
                System.out.print("Enter a variable name (q to quit): ");
            }
        }
    }
}

img

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

public class Test {

public static void main(String[] args) {
    
    //关键字列举数组
    String[] keyWords = new String[]{"class", "interface", "public", "extends", "private", "protect", "while", "if", "for", "abstract", "final"};
    
    Scanner sc = new Scanner(System.in);
    boolean flag = true;
    while(flag) {
        System.out.print("Enter a variable name (q to quit):");
        String str = sc.next();
        if("q".equals(str)) {
            //如果输入的是q,终止循环
            flag = false;
            break;
        }
        //输入的不是q,开始校验
        String rexOne = "[a-zA-Z]";
        String rexTwo = "[0-9]";
        String rexThree = "[_$]";
        String rexFour = "[a-z]";
        if(str.replaceAll(rexOne, "").replaceAll(rexTwo, "").replaceAll(rexThree, "").length() > 0) {
            //判断是否有除了字母,数字,_$之外的内容
            System.out.println("legal,but uses poor style");
        }else {
            //判断是否是以数字开头
            String firstStr = str.substring(0, 1);
            if(Pattern.compile(rexTwo).matcher(firstStr).find()) {
                System.out.println("legal,but uses poor style");
            }else if(Arrays.asList(keyWords).contains(str)){
                System.out.println("legal,but uses poor style");
            }else {
                if(str.replaceAll(rexOne, "").replaceAll(rexTwo, "").length() == 0 && Pattern.compile(rexFour).matcher(firstStr).find()) {
                    System.out.println("professional");
                }else {
                    System.out.println("legal");
                }
            }
        }
        
    }
    
}

}