1:登录注册案例(理解)
需求:要求做一个登录注册案例。
分析:
有哪些类?
用户类
用户基本描述类
用户操作类
用户操作接口
|--用户操作类(对象数组)
|--用户操作类(集合)
|--用户操作类(IO)
测试类
|--用户操作类(awt)
类有什么?
用户基本描述类
成员变量:用户名,密码,性别,地址
构造方法:无参,带参
get/set方法。
用户操作接口
成员方法:
登录,注册
测试类
main方法。
类之间的关系?
在测试类中调用用户类和用户操作类。
分包的分析:
老师类:
增加,删除,修改,查找
学生类:
增加,删除,修改,查找
工人类:
增加,删除,修改,查找
A:按功能划分
cn.itcast.add
cn.itcast.add.AddTeacher
cn.itcast.add.AddStudent
cn.itcast.add.AddWorker
cn.itcast.delete
cn.itcast.delete.DeleteTeacher
cn.itcast.delete.DeleteStudent
cn.itcast.delete.DeleteWorker
cn.itcast.update
...
cn.itcast.find
...
B:按照模块划分
cn.itcast.teacher
cn.itcast.teacher.AddTeacher
cn.itcast.teacher.DeleteTeacher
cn.itcast.teacher.UpdateTeacer
cn.itcast.teacher.FindTeacher
cn.itcast.student
cn.itcast.student.AddStudent
cn.itcast.student.DeleteStudent
cn.itcast.student.UpdateStudent
cn.itcast.student.FindStudent
cn.itcast.worker
...
今天我们先按照功能分:
用户的基本描述类 cn.itcast.pojo (vo,dto,domain)
用户的操作类 cn.itcast.dao
用户的测试类 cn.itcast.test
2:正则表达式(掌握用法)
(1)符合一定规则的字符串。
(2)规则:
A:字符
x 字符 x
\\ 反斜线字符
\r 回车符
\n 换行符
B:字符类
[abc] a、b 或 c
[^abc] 任何字符,除了 a、b 或 c
[a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内
[0-9] 包括0-9之间的字符
C:预定义字符类
. 任何字符
\d 数字:[0-9]
\w 单词字符:[a-zA-Z_0-9]
D:边界匹配器
^ 行的开头
$ 行的结尾
\b 单词边界
就是指这里出现的不能使单词字符。
he;wor xixi
E:Greedy 数量词
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次
F:组的概念(按照小括号从左开始编号,每一个对应着一个组)
(a(b(c)d(e)))
第一组:a(b(c)d(e))
第二组:b(c)d(e)
第三组:c
第四组:e
将来我们就可以通过编号来获取组中内容。组0表示整个表达式。
(3)通过String类的功能使用正则表达式
A:判断功能
public boolean matches(String regex)
B:分割功能
public String[] split(String regex)
C:替换功能
public String replaceAll(String regex,String newString)
记住:
叠次:
在同一个字符串中,右边引用左边:"(.)\\1+"
在后一个字符串中引用前面的字符串的组内容:"(.)\\1+","$1"
(4)案例:
C:我要学编程
需求:要求做一个登录注册案例。
分析:
有哪些类?
用户类
用户基本描述类
用户操作类
用户操作接口
|--用户操作类(对象数组)
|--用户操作类(集合)
|--用户操作类(IO)
测试类
|--用户操作类(awt)
类有什么?
用户基本描述类
成员变量:用户名,密码,性别,地址
构造方法:无参,带参
get/set方法。
用户操作接口
成员方法:
登录,注册
测试类
main方法。
类之间的关系?
在测试类中调用用户类和用户操作类。
分包的分析:
老师类:
增加,删除,修改,查找
学生类:
增加,删除,修改,查找
工人类:
增加,删除,修改,查找
A:按功能划分
cn.itcast.add
cn.itcast.add.AddTeacher
cn.itcast.add.AddStudent
cn.itcast.add.AddWorker
cn.itcast.delete
cn.itcast.delete.DeleteTeacher
cn.itcast.delete.DeleteStudent
cn.itcast.delete.DeleteWorker
cn.itcast.update
...
cn.itcast.find
...
B:按照模块划分
cn.itcast.teacher
cn.itcast.teacher.AddTeacher
cn.itcast.teacher.DeleteTeacher
cn.itcast.teacher.UpdateTeacer
cn.itcast.teacher.FindTeacher
cn.itcast.student
cn.itcast.student.AddStudent
cn.itcast.student.DeleteStudent
cn.itcast.student.UpdateStudent
cn.itcast.student.FindStudent
cn.itcast.worker
...
今天我们先按照功能分:
用户的基本描述类 cn.itcast.pojo (vo,dto,domain)
用户的操作类 cn.itcast.dao
用户的测试类 cn.itcast.test
2:正则表达式(掌握用法)
(1)符合一定规则的字符串。
(2)规则:
A:字符
x 字符 x
\\ 反斜线字符
\r 回车符
\n 换行符
B:字符类
[abc] a、b 或 c
[^abc] 任何字符,除了 a、b 或 c
[a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内
[0-9] 包括0-9之间的字符
C:预定义字符类
. 任何字符
\d 数字:[0-9]
\w 单词字符:[a-zA-Z_0-9]
D:边界匹配器
^ 行的开头
$ 行的结尾
\b 单词边界
就是指这里出现的不能使单词字符。
he;wor xixi
E:Greedy 数量词
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次
F:组的概念(按照小括号从左开始编号,每一个对应着一个组)
(a(b(c)d(e)))
第一组:a(b(c)d(e))
第二组:b(c)d(e)
第三组:c
第四组:e
将来我们就可以通过编号来获取组中内容。组0表示整个表达式。
(3)通过String类的功能使用正则表达式
A:判断功能
public boolean matches(String regex)
B:分割功能
public String[] split(String regex)
C:替换功能
public String replaceAll(String regex,String newString)
记住:
叠次:
在同一个字符串中,右边引用左边:"(.)\\1+"
在后一个字符串中引用前面的字符串的组内容:"(.)\\1+","$1"
(4)案例:
A:校验电话号码
import java.util.Scanner;
/*
* 判断功能:
* public boolean matches(String regex)
*
* 注意:
* 能够通过我们讲过的规则,去看懂别人写好的正则表达式。
*/
public class RegexDemo {
public static void main(String[] args) {
// 判断字符串”qaq”其中的字符是否是元音(aeiou)
// String str = "qaq";
// String str = "qbq";
// String regex = "q[aeiou]q";
// boolean flag = str.matches(regex);
// System.out.println(flag);
// 校验电话号码
Scanner sc = new Scanner(System.in);
System.out.println("请输入电话号码:");
String phone = sc.nextLine();
/*
* 13436975980 18712345678 13234567890 13868687979 18512349087
*/
// 规则
String regex = "1[38]\\d{9}";
boolean flag = phone.matches(regex);
System.out.println(flag);
}
}
B:校验邮箱
import java.util.Scanner;
/*
* 校验邮箱。
*/
public class RegexTest {
public static void main(String[] args) {
// 键盘录入邮箱
Scanner sc = new Scanner(System.in);
System.out.println("请输入邮箱:");
String email = sc.nextLine();
// 写规则
// String regex =
// "[a-zA-Z_0-9]+@[a-zA-Z0-9]{2,7}(\\.[a-zA-Z0-9]{2,3})+";
// String regex =
// "[a-zA-Z_0-9]+@[a-zA-Z_0-9]{2,7}(\\.[a-zA-Z_0-9]{2,3})+";
String regex = "\\w+@\\w{2,7}(\\.\\w{2,3})+";
/*
* 12345@qq.com linqingxia@163.com ma_yun@yahoo.com.cn hello@sina.com.cn
*/
// 校验
boolean flag = email.matches(regex);
System.out.println(flag);
}
}
/*
* 替换功能:
* public String replaceAll(String regex,String replacement)
*/
public class RegexDemo {
public static void main(String[] args) {
// 用”#”替换叠词:"sdaaafghccccjkqqqqql";
String str = "sdaaafghccccjkqqqqql";
String regex = "(.)\\1+";
String result = str.replaceAll(regex, "#");
System.out.println(result);
// 把数字用“*”替换wert13245asfklwyoeworewsfd6744232433fafs
String str2 = "wert13245asfklwyoeworewsfd6744232433fafs";
// String regex2 = "\\d+";
String regex2 = "\\d";
String result2 = str2.replaceAll(regex2, "*");
System.out.println(result2);
// 把多个叠词变成一个。用上面的字符串;
String str3 = "sdaaafghccccjkqqqqql";
String regex3 = "(.)\\1+";
//在替换功能中,我们想在第二个字符串中使用第一个规则中的组的内容,也是可以通过编号获取的,但是这个时候的前缀是$。
String result3 = str3.replaceAll(regex3, "$1");
System.out.println(result3);
}
}
C:我要学编程
/*
* 我我....我...我.要...要要...要学....学学..学.编..编编.编.程.程.程..程
* 将字符串还原成:“我要学编程”。
*
* 分析:
* A:只需要把.替换成""
* B:叠词保留一个
*/
public class RegexTest {
public static void main(String[] args) {
String str = "我我....我...我.要...要要...要学....学学..学.编..编编.编.程.程.程..程";
// 只需要把.替换成""
String s1 = str.replaceAll("\\.", "");
System.out.println(s1);
//叠词保留一个
String s2 = s1.replaceAll("(.)\\1+", "$1");
System.out.println(s2);
}
}