编写程序检验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): ");
}
}
}
}
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");
}
}
}
}
}
}