算是回顾以前所学的知识

创建项目以及程序入口类

package top.thecat;

/**
 * 电话本项目入口类
 */
public class App {
    /**
     * 启动电话本项目
     * @param args
     */
    public static void main(String[] args) {

    }

    /**
     * 控制主菜单
     */
    public void start(){

    }
}

App.class


菜单类就是用sout来输出菜单格式:
App.clsss

        System.out.println("*************************");
        System.out.println("** 1 添加记录 **");
        System.out.println("** 2 查找记录 **");
        System.out.println("** 3 修改记录 **");
        System.out.println("** 4 删除记录 **");
        System.out.println("** 5 排序记录 **");
        System.out.println("** 6 退出系统 **");
        System.out.println("*************************");

App.class

package top.thecat;

/**
 * 实体类
 */
public class Person {
//    实体类的属性
    private int id;
    private String name;
    private String age;
    private String sex;
    private String telNum;
    private String address;

    //    首先添加无参构造方法
    public Person() {
    }

//    添加有参构造方法之前要添加一个无参的。
    public Person(String name, String age, String sex, String telNum, String address) {
        this.name = name;
        this.age = age;
        this.sex = sex;
        this.telNum = telNum;
        this.address = address;
    }

    //    为成员变量生成get&&set方法
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getTelNum() {
        return telNum;
    }

    public void setTelNum(String telNum) {
        this.telNum = telNum;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

//    重写toString 快捷键ctrl O
    @Override
    public String toString() {
        StringBuffer sb = new StringBuffer();
        sb.append("序号").append(this.id).append("#").append("\t");
        sb.append("姓名").append(this.name).append("\t\t");
        sb.append("年龄").append(this.age).append("\t\t");
        sb.append("性别").append(this.sex).append("\t\t");
        sb.append("电话号码").append(this.telNum).append("\t\t");
        sb.append("地址").append(this.address);
        return sb.toString();
    }
}

package top.thecat;

import java.util.ArrayList;
import java.util.List;

/**
 * 核心业务类
 */
public class Operate {
    private List<Person> list;
    public Operate(){
//        实例化arraylist容器
        this.list = new ArrayList<>();
    }

    /**
     * 用户添加记录业务逻辑控制
     */
    public void addLogic(){

    }

    /**
     * 查询记录业务逻辑控制
     */
    public void searchLogic(){

    }

    /**
     * 修改记录业务逻辑控制
     */
    public void modifyLogic(){

    }

    /**
     * 删除记录业务逻辑控制
     */
    public void deleteLogic(){

    }

    /**
     * 排序记录业务逻辑控制
     */
    public void orderLogic(){

    }

    /**
     * 添加新记录信息
     */
    public void addOperation(){
    }

    /**
     * 查询全部记录
     */
    public void showAll(){
    }

    /**
     * 按姓名查询记录
     */
    public void searchByName(){
    }

    /**
     * 按年龄查询记录
     */
    public void searchByAge(){
    }

    /**
     * 按性别查询记录
     */
    public void searchBySex(){
    }

    /**
     * 按电话号码查询记录
     */
    public void searchByTelNum(){
    }

    /**
     * 按地址查询记录
     */
    public void searchByAdd(){
    }

    /**
     * 修改指定记录
     */
    public void modifyOperation(){
    }

    /**
     * 删除指定记录
     */
    public void deleteOperation(){
    }

    /**
     * 删除全部记录
     */
    public void deleteAllOperation(){
    }

    /**
     * 按用户姓名排序记录
     */
    public void orderName(){
    }

    /**
     * 按用户年龄排序记录
     */
    public void orderAge(){
    }

    /**
     * 按用户性别排序记录
     */
    public void orderSex(){
    }

}

package top.thecat;

/**
 * 数据校验类
 */
public class TelNoteRegex {
    /**
     * 对菜单输入选项的验证的方法
     * @param min
     * @param max
     * @return
     */
    public int menuItemValidate(int min, int max){
        return 0;
    }

    /**
     * 对用户输入姓名的验证
     * @return
     */
    public String nameValidate(){
        return null;
    }

    /**
     * 对用户输入年龄的验证
     */
    public String ageValidate(){
        return null;
    }

    /**
     * 对用户输入性别的验证
     */
    public String sexValidate(){
        return null;
    }

    /**
     * 对用户输入电话号码的验证
     */
    public String phoneValidate(){
        return null;
    }

    /**
     * 对用户输入的地址验证
     */
    public String addressValidate(){
        return null;
    }




}

    /**
     * 按姓名排序的比较器
     */
    class OrderByName implements Comparator<Person>{

        @Override
        public int compare(Person o1, Person o2) {
            return 0;
        }
    }

    /**
     * 按年龄进行排序的比较器
     * implements 接口实现
     */
    class OrderByAge implements Comparator<Person>{

        @Override
        public int compare(Person o1, Person o2) {
            return 0;
        }
    }

    /**
     * 按性别排序的比较器
     */
    class OrderBySex implements Comparator<Person>{

        @Override
        public int compare(Person o1, Person o2) {
            return 0;
        }
    }

正则表达式介绍

正则表达式又称为规则表达式。
正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。

正则表达式的作用:
事先定义好的一些特定字符、及这些特定字符的组和,组成一个“规则过滤字符串”
用来表达对字符串的一种过滤逻辑。

正则表达式的特点:
灵活性、逻辑性和功能性非常的强
可以迅速地用极简单的方式达到字符串的复杂控制
对于刚接触的人来说,比较晦涩难懂

内容限定

我擦不小心删除了,,,上网看看呗

    /**
     * 对菜单输入选项的验证的方法
     * @param min
     * @param max
     * @return
     */
    public int menuItemValidate(int min, int max){
//        定义验证菜单项的正则表达式
        String regex = "[1-9]{1}";
//        创建键盘输入对象  //实例化输入类
        Scanner scanner = new Scanner(System.in);
        while (true){
            System.out.println("请输入正确的数字,最小是:"+min+"最大为:"+max);
            String input = scanner.nextLine();
            if(input.matches(regex)){
//                判断内容 是否合法
                int inputNum = Integer.parseInt(input);
                if (inputNum>=min && inputNum<=max){
                    return inputNum;
                }else {
                    System.out.println("您输入的菜单项不符,请重写输入");
                }
            }else {
//                判断  是否合法
                System.out.println("输入数字错误,请检查");
            }

        }
    }

    /**
     * 对用户输入姓名的验证
     * 字母可以是大写或小写,长度1-10之间
     * @return
     */
    public String nameValidate(){
//        验证姓名的正则表达式
        String regex = "[a-zA-Z]{1,10}";
//        创建Scanner对象
        Scanner scanner = new Scanner(System.in);
//
        while (true){
            System.out.println("请输入姓名,格式为:1-10之间的字母");
//            调用键盘输入对象的方法实现用户的输入
            String input = scanner.nextLine();
//            正则表达式的验证
            if (input.matches(regex)){
                return input;   //验证通过之后将用户输入争取的内容返回回去。
            }else {
                System.out.println("您当前输入的姓名有误,请重新输入");
            }
        }

    }

    /**
     * 对用户输入年龄的验证
     * 年龄的格式要求10-99之间
     */
    public String ageValidate(){
//        对年龄进行校验的正则表达式     //使用组合式定义
        String regex = "[1-9]{1}[0-9]{1}";
//        创建键盘输入对象
        Scanner scanner = new Scanner(System.in);
//
        while (true){
            System.out.println("请输入年龄:格式为10-99之间的数字");
//            调用键盘输入对象的方法实现用户的输入
            String input = scanner.nextLine();
//            正则表达式的验证
            if (input.matches(regex)){
                return input;
            }else {
                System.out.println("您当前输入的年龄有误,请重新输入");
            }
        }
        
    }

    /**
     * 对用户输入性别的验证
     * 性别的输入要求:男(M或m) 女(f或F)
     */
    public String sexValidate(){
//        对性别验证的正则表达式
        String regex = "[m|M|f|F]{1}";  // | 表示或者
//        创建Scanner对象
        Scanner scanner = new Scanner(System.in);
        while (true){
            System.out.println("亲输入性别:(男 m Or M)(女 f Or F)");
            String input = scanner.nextLine();
            if (input.matches(regex)){
//                如果用户输入正确则返回输入内容
                return input;
            }else {
                System.out.println("性别输入有误,请重新输入");
            }
        }

    }

    /**
     * 对用户输入电话号码的验证
     * 电话号码要求:允许带有区号的做鸡号,允许手机号
     */
    public String phoneValidate(){
//        对电话号码的正则表达式
        String regex = "(\\d{3,4}-\\d{7,8})|([1]{1}\\d{10})";
//        创建Scanner对象
        Scanner scanner = new Scanner(System.in);
        while (true){
            System.out.println("请输入手机号码");
//            调用Scanner对象的输入方法
            String input = scanner.nextLine();
//            判断用户输入的内容是否符合条件
            if (input.matches(regex)){
                return input;
            }else {
                System.out.println("输入内容有误,请重新输入");
            }
        }
        
    }

    /**
     * 对用户输入的地址验证
     * 地址格式要求:字母或者数字,长度为1-50个字符
     * */
    public String addressValidate(){
//        定义地址验证表达式
        String regex = "\\w{1,50}";
//        创建Scanner 输入对象
        Scanner scanner = new Scanner(System.in);
        while (true){
//            提示一句话,淦 不然 人家不知道咋操作
            System.out.println("请输入地址");
            String input = scanner.nextLine();
            if (input.matches(regex)){
                return input;
            }else {
                System.out.println("输入有误,请重新输入");
            }
        }

测试验证类中得验证方法

//    测试代码用
public static void main(String[] args) {
//    实例化TelNoteRegex类
    TelNoteRegex regex = new TelNoteRegex();
    /*int menuItem = regex.menuItemValidate(1,6);
    System.out.println(menuItem);*/

    /*String name = regex.nameValidate();
    System.out.println(name);*/

    /*String age = regex.ageValidate();
    System.out.println(age);*/

    /*String sex = regex.sexValidate();
    System.out.println(sex);*/

    String tel = regex.telValidate();
    System.out.println(tel);

/*    String address = regex.addressValidate();
    System.out.println(address);*/

    }

APP类实现start方法与main方法

package top.thecat;

/**
 * 电话本项目入口类
 */
public class App {
    /**
     * 启动电话本项目
     * @param args
     */
    public static void main(String[] args) {
        App app = new App();
        app.start();
    }

    /**
     * 控制主菜单
     */
    public void start(){
//        实例化类 || 对象
        Menu menu = new Menu();
        TelNoteRegex regex = new TelNoteRegex();
        Operate operate = new Operate();
//        调用方法
        while (true){
            menu.mainMenu();    //保证主菜单一直存在
            int item = regex.menuItemValidate(1,6);
            switch (item){
                case 1: operate.addLogic();break;
                case 2: operate.searchLogic();break;
                case 3: operate.modifyLogic();break;
                case 4: operate.deleteLogic();break;
                case 5: operate.orderLogic();break;
                case 6: System.exit(0);
            }
        }

    }
}

Operate类

    /**
     * 用户添加记录业务逻辑控制
     */
    public void addLogic(){
        Menu menu = new Menu();
        TelNoteRegex telNoteRegex = new TelNoteRegex();
        while (true){
            menu.addMenu();
            int item = telNoteRegex.menuItemValidate(1,3);
            switch (item){
//                调用当前对象的方法
                case 1: this.addOperation();break;
                case 2: this.showAll();break;
                case 3: return;
            }
        }
    }

     /**
     * 查询记录业务逻辑控制
     */
    public void searchLogic(){
        Menu menu = new Menu();
        TelNoteRegex telNoteRegex = new TelNoteRegex();
        while (true){
            menu.searchMenu();
            int item = telNoteRegex.menuItemValidate(1,7);
            switch (item){
                case 1: this.searchByName();break;
                case 2: this.searchByAge();break;
                case 3: this.searchBySex();break;
                case 4: this.searchByTelNum();break;
                case 5: this.searchByAdd();break;
                case 6: this.showAll();break;
                case 7: return; //返回上一级
            }
        }
    }

    /**
     * 修改记录业务逻辑控制
     */
    public void modifyLogic(){
        Menu menu = new Menu();
        TelNoteRegex telNoteRegex = new TelNoteRegex();
        while (true){
            menu.modifyMenu();
            int item = telNoteRegex.menuItemValidate(1,3);
            switch (item){
                case 1: this.showAll();break;
                case 2: this.deleteOperation();break;
                case 3: return;
            }
        }
    }

    /**
     * 删除记录业务逻辑控制
     */
    public void deleteLogic(){
        Menu menu = new Menu();
        TelNoteRegex telNoteRegex = new TelNoteRegex();
        while (true){
            menu.deleteMenu();
            int item = telNoteRegex.menuItemValidate(1,4);
            switch (item){
                case 1: this.showAll();break;
                case 2: this.deleteOperation();break;
                case 3: this.deleteAllOperation();break;
                case 4: return;
            }
        }
    }

    /**
     * 排序记录业务逻辑控制
     */
    public void orderLogic(){
        Menu menu = new Menu();
        TelNoteRegex telNoteRegex = new TelNoteRegex();
        while (true){
            menu.orderMenu();
            int item = telNoteRegex.menuItemValidate(1,5);
            switch (item){
                case 1: this.orderName();break;
                case 2: this.orderAge();break;
                case 3: this.orderSex();break;
                case 4: this.showAll();break;
                case 5: return;
            }
        }
    }

    /**
     * 添加新记录信息
     */
    public void addOperation(){
//        实例化对象
        TelNoteRegex telNoteRegex = new TelNoteRegex();
        String name = telNoteRegex.nameValidate();
        String age = telNoteRegex.ageValidate();
        String sex = telNoteRegex.sexValidate();
        String telNum = telNoteRegex.telValidate();
        String address = telNoteRegex.addressValidate();
//        实例化Person对象
        Person person = new Person(name,age,sex,telNum,address);    //构造方法传参
        this.list.add(person);
        person.setId(this.list.size()); //生成ID
    }

    /**
     * 查询全部记录
     */
    public void showAll(){
        if (this.list.size()==0){
            System.out.println("没有任何记录");
            return;
        }
        for (int i=0;i<this.list.size();i++){
            System.out.println(this.list.get(i));
        }
    }

    /**
     * 按姓名查询记录
     */
    public void searchByName(){
        TelNoteRegex telNoteRegex = new TelNoteRegex();
        String name = telNoteRegex.nameValidate();  //获得合法的姓名
        boolean flag = true;
        for (int i=0;i<this.list.size();i++){
            if (name.equals(this.list.get(i).getName())){
                System.out.println(this.list.get(i));
                flag = false;
            }
        }
        if (flag){
            System.out.println("此人已死有事请烧纸!!!");
        }
    }

    /**
     * 按年龄查询记录
     */
    public void searchByAge(){
        TelNoteRegex telNoteRegex = new TelNoteRegex();
        String age = telNoteRegex.ageValidate();
        boolean flag = true;
        for (int i=0;i<this.list.size();i++){
            if (age.equals(this.list.get(i).getAge())){
                System.out.println(this.list.get(i));
                flag = false;
            }
        }
        if (flag){
            System.out.println("查无记录");
        }
    }

    /**
     * 按性别查询记录
     */
    public void searchBySex(){
        TelNoteRegex telNoteRegex = new TelNoteRegex();
        String sex = telNoteRegex.sexValidate();
        boolean flag = true;
        for (int i=0;i<this.list.size();i++){
            if (sex.equals(this.list.get(i).getSex())){
                System.out.println(this.list.get(i));
                flag = false;
            }
        }
        if (flag){
            System.out.println("查无记录");
        }
    }

    /**
     * 按电话号码查询记录
     */
    public void searchByTelNum(){
        TelNoteRegex telNoteRegex = new TelNoteRegex();
        String tel = telNoteRegex.telValidate();
        boolean flag = true;
        for (int i=0;i<this.list.size();i++){
            if (tel.equals(this.list.get(i).getSex())){
                System.out.println(this.list.get(i));
                flag = false;
            }
        }
        if (flag){
            System.out.println("查无记录");
        }
    }

    /**
     * 按地址查询记录
     */
    public void searchByAdd(){
        TelNoteRegex telNoteRegex = new TelNoteRegex();
        String address = telNoteRegex.addressValidate();
        boolean flag = true;
        for (int i=0;i<this.list.size();i++){
            if (address.equals(this.list.get(i).getAddress())){
                System.out.println(this.list.get(i));
                flag = false;
            }
        }
        if (flag){
            System.out.println("查无记录");
        }
    }

    /**
     * 修改指定记录
     */
    public void modifyOperation(){
        TelNoteRegex telNoteRegex = new TelNoteRegex();
        Menu menu = new Menu();
//        对被修改的序号进行验证,可以使用对菜单项验证的方法来完成。
        System.out.println("请输入记录的序号");
        int itemNum = telNoteRegex.menuItemValidate(1,this.list.size());
        menu.subModifyMenu();
        int menuItem = telNoteRegex.menuItemValidate(1,6);
        switch (menuItem){
            case 1: String name = telNoteRegex.nameValidate(); (this.list.get(itemNum - 1)).setName(name); break;
            case 2: String age = telNoteRegex.ageValidate(); (this.list.get(itemNum - 1)).setAge(age); break;
            case 3: String sex  = telNoteRegex.sexValidate(); (this.list.get(itemNum - 1)).setSex(sex); break;
            case 4: String tel = telNoteRegex.telValidate(); (this.list.get(itemNum - 1)).setTelNum(tel); break;
            case 5: String address = telNoteRegex.addressValidate(); (this.list.get(itemNum - 1)).setAddress(address); break;
            case 6: return;
        }
        
    }

    /**
     * 删除指定记录
     */
    public void deleteOperation(){
        TelNoteRegex telNoteRegex = new TelNoteRegex();
        System.out.println("请输入记录序号");
        int itemNum = telNoteRegex.menuItemValidate(1,this.list.size());
        this.list.remove(itemNum - 1);
//        为了出现记录不连续的情况,,重新设置新序号
        for (int i=0;i<this.list.size();i++){
            (this.list.get(i)).setId(i+1);
        }
        System.out.println("删除成功,请继续操作!");

    }

    /**
     * 删除全部记录
     */
    public void deleteAllOperation(){
        this.list.clear();  //clear()方法 用于清空容器的元素
        System.out.println("通讯录管理系统已恢复初始化状态,请继续操作!");
    }

    /**
     * 按姓名排序的比较器
     */
    class OrderByName implements Comparator<Person>{

        @Override
        public int compare(Person o1, Person o2) {
            return o1.getName().compareTo(o2.getName());
        }
    }

    /**
     * 按年龄进行排序的比较器
     * implements 接口实现
     */
    class OrderByAge implements Comparator<Person>{

        @Override
        public int compare(Person o1, Person o2) {
            return o1.getAge().compareTo(o2.getAge());
        }
    }

    /**
     * 按性别排序的比较器
     */
    class OrderBySex implements Comparator<Person>{

        @Override
        public int compare(Person o1, Person o2) {
            return o1.getSex().compareTo(o2.getSex());
        }
    }

默认按照:按照API字典进行排序

    /**
     * 按用户姓名排序记录
     */
    public void orderName(){
        Collections.sort(this.list,new OrderByName());
//        由于排序之后序号是乱的,,,我们需要重新对序号进行处理
        for(int i=0;i<this.list.size();i++){
            (this.list.get(i)).setId(i+1);
        }
    }

    /**
     * 按用户年龄排序记录
     */
    public void orderAge(){
        Collections.sort(this.list,new OrderByAge());

        for (int i=0;i<this.list.size();i++){
            (this.list.get(i)).setId(i+1);
        }
    }

    /**
     * 按用户性别排序记录
     */
    public void orderSex(){
        Collections.sort(this.list,new OrderBySex());

        for (int i=0;i<this.list.size();i++){
            (this.list.get(i)).setId(i+1);
        }
    }

项目演示

java -jar test.jar 让项目跑起来
java -jar &lt;name&gt;

最后修改:2022 年 04 月 07 日 02 : 42 PM