练习 String 类、System类、Random类、Date 类、Calendar 类、、SimpleDateFormat 类以及正则表达式的使用。
在Idea中新建名为experiment12的Java项目,在该项目的src下新建experiment2软件包,在该包下创建名为TestAPI的Java类,该类包含一个main方法和5个静态方法,在该类中完成本实验,实验内容如下(分别在5个静态方法中完成(1)-(5)的实验内容,5个静态方法的名字分别为test1、test2、test3、test4和test5,在main方法中执行test1-test5):
(1) 首先获取系统当前时间,并格式化成 xxxx 年x 月x 日的形式打印出来
(2) 然后随机获取 a~z 中 4 个字符,并将这 4 个字符拼接成字符串输出,如果拼接的字符串中包含字符 a,则将字符a 替换为@,并将替换后的字符串输出。
(3) 最后打印第(1)步和第(2)步执行花费的总时长(可以在第一步执行前获取系统时间,在第(2)步执行后获取系统时间,然后进行相减)。
(4)使用正则表达式模拟验证手机号的过程,按照以下要求实现相关代码:
l 提示用户在控制台输入手机号,用一个字符串对其进行保存
l 判断该手机号位数是否是 11 位
l 判断该手机号,是否都是数字
l 判断改手机号最后 3 为数字如果是相同数字则认为是靓号。
(5)使用 String 的常用方法和 StringBuffer 类模拟验证手机号的过程,按照以下要求实现相关代码
l 提示用户在控制台输入手机号,用一个字符串对其进行保存
l 判断该手机号位数是否是 11 位
l 判断该手机号,是否都是数字
l 判断改手机号最后 3 为数字,如果是相同数字则认为是靓号
- import java.time.LocalDateTime;
- import java.time.format.DateTimeFormatter;
- import java.util.Random;
- import java.util.Scanner;
-
- public class TestAPI {
- public static void main(String[] arg) {
- Scanner strin = new Scanner(System.in);
- System.out.printf("test1测试结果如下:\n");
- long time1 = System.currentTimeMillis();
- test1();
- System.out.printf("\n");
- System.out.printf("test2测试结果如下:\n");
- test2();
- System.out.printf("\n");
- long time2 = System.currentTimeMillis();
- System.out.printf("运行test1和test2系统花费时间为:" + (time2 - time1));
- System.out.printf("\n");
- System.out.printf("请输入用户的手机号码:\n");
- String str = strin.next();
- System.out.printf("test3的测试结果如下:\n");
- test3(str);
- System.out.printf("test4的测试结果如下:\n");
- test4(str);
- }
-
- public static void test1() {
- // 打印出当前的系统时间
- LocalDateTime Idt = LocalDateTime.now();
- DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH时mm分ss秒");
- System.out.print(Idt.format(dtf));
- }
-
- public static void test2() {
- // 随机选取四个字母组成字符串,如果选取的字符为a,则替换为@
- int length = 4;
- String str = "abcdefghijklmnopqrstuvwxyz";
- Random random = new Random();
- StringBuffer newstr = new StringBuffer();
- for (int i = 0; i < length; i++) {
- int number = random.nextInt(26);
- if (number == 'a') {
- number = '@';
- }
- newstr.append(str.charAt(number));
- }
- System.out.printf(String.valueOf(newstr));
- }
-
- public static void test3(String tel) {
- String a,b,c;
- String regex = "1[345678][0-9]{9}";
- if (tel.matches(regex)) {
- System.out.printf("电话号码格式正确,电话号码位数为11位,并且都是数字\n");
- } else {
- System.out.printf("电话号码格式不正确\n");
- }
- // 为了偷懒,我直接用切片做的靓号比较
- a = tel.substring(8);
- b = tel.substring(9);
- c = tel.substring(10);
- if((a==b)&&(b==c)){
- System.out.printf("改手机号码为靓号\n");
- }
- else{
- System.out.printf("改手机号码不是靓号\n");
- }
- }
-
- public static void test4(String tel){
- char a,b,c;
- int length = tel.length();
- if(length == 11){
- System.out.printf("改电话号码长度正确为11位\n");
- }
- for(int i =0;i
- if(!Character.isDigit(tel.charAt(i))){
- System.out.printf("该电话号码不全为数字\n");
- }
- }
- System.out.printf("该电话号码全为数字\n");
- a = tel.charAt(8);
- b = tel.charAt(9);
- c = tel.charAt(10);
- if((a==b)&&(b==c)){
- System.out.printf("该电话号码为靓号\n");
- }
- else{
- System.out.printf("该电话号码不为靓号\n");
- }
- }
- }
-
四、实验总结
本实验比较有特色的部分在于判断手机号是否为靓号,在实验中可以使用三种不同的方式判断一个手机号是否为靓号:
1)给出多个符合靓号格式的正则表达式,判断手机号码是否符合(或者将多个符合靓号表达式的正则表达式进行合并);
2)使用substringj进行字符串切片进行比较;
3)使用charAtj进行字符串切片比较;