咕噜咕噜姑 2022-10-10 11:20 采纳率: 100%
浏览 271
已结题

检测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

  • 写回答

5条回答 默认 最新

  • Java大魔王 2022-10-10 11:41
    关注
    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");
                            }
                        }
                    }
                }
            }
            
        }
        
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 10月19日
  • 已采纳回答 10月11日
  • 创建了问题 10月10日

悬赏问题

  • ¥15 vue使用gojs,需求在link中的虚线上添加方向箭头
  • ¥15 CSS通配符清除内外边距为什么可以覆盖默认样式?
  • ¥15 SPSS分类模型实训题步骤
  • ¥15 求解决扩散模型代码问题
  • ¥15 工创大赛太阳能电动车项目零基础要学什么
  • ¥20 limma多组间分析最终p值只有一个
  • ¥15 nopCommerce开发问题
  • ¥15 torch.multiprocessing.spawn.ProcessExitedException: process 1 terminated with signal SIGKILL
  • ¥15 QuartusⅡ15.0编译项目后,output_files中的.jdi、.sld、.sof不更新怎么解决
  • ¥15 pycharm输出和导师的一样,但是标红