一、 实验目的
练习 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<tel.length();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进行字符串切片比较;