day14_API第四天

1、正则(了解)

1、基本的正则表达式(看懂即可)
字符类
[abc] a、b 或 c(简单类)
[^abc] 任何字符,除了 a、b 或 c(否定)
[a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围)
[0-9] 0到9的字符都包括
[a-d[m-p]] a 到 d 或 m 到 p:[a-dm-p](并集)
[a-z&&[def]] d、e 或 f(交集)
[a-z&&[^bc]] a 到 z,除了 b 和 c:[ad-z](减去)
[a-z&&[^m-p]] a 到 z,而非 m 到 p:[a-lq-z](减去)
 [abc] a、b 或 c(简单类)
  1. String regex = "[abc]"; //[]代表单个字符
  2. System.out.println("aa".matches(regex));//false,只限于单个字符
  3. System.out.println("b".matches(regex));//true
  4. System.out.println("c".matches(regex));//true
  5. System.out.println("d".matches(regex));//false
  6. System.out.println("1".matches(regex));//false
  7. System.out.println("%".matches(regex));//false
 [^abc] 任何字符,除了 a、b 或 c(否定)
  1. String regex = "[^abc]";
  2. System.out.println("a".matches(regex));//f
  3. System.out.println("b".matches(regex));//f
  4. System.out.println("c".matches(regex));//f
  5. System.out.println("d".matches(regex));//t
  6. System.out.println("1".matches(regex));//t
  7. System.out.println("%".matches(regex));//t
  8. System.out.println("10".matches(regex));//f 因为是两个字符
[a-zA-Z] a到 z 或 A到 Z,两头的字母包括在内(范围)
  1. String regex = "[a-zA-Z]";
  2. System.out.println("a".matches(regex));//t
  3. System.out.println("A".matches(regex));//t
  4. System.out.println("z".matches(regex));//t
  5. System.out.println("Z".matches(regex));//t
  6. System.out.println("1".matches(regex));//f
  7. System.out.println("%".matches(regex));//f
[0-9] 0到9的字符都包括
  1. String regex = "[0-9]";
  2. System.out.println("8".matches(regex));//t
  1. System.out.println("a".matches(regex));//f
[a-d[m-p]] a 到 d 或 m 到 p:[a-dm-p](并集)
  1. String regex = "[a-d[m-p]]";
  2. System.out.println("a".matches(regex));//t
  3. System.out.println("m".matches(regex));//t
  4. System.out.println("e".matches(regex));//f
[a-z&&[def]] d、e 或 f(交集)
  1. String regex = "[a-z&&[def]]";//取交集
  2. System.out.println("a".matches(regex));//f
  3. System.out.println("d".matches(regex));//t
[a-z&&[^bc]] a 到 z,除了 b 和 c:[ad-z](减去)
  1. String regex = "[a-z&&[^bc]]";
  2. System.out.println("a".matches(regex));//t
  3. System.out.println("b".matches(regex));//f
  4. System.out.println("1".matches(regex));//f
[a-z&&[^m-p]] a 到 z,而非 m 到 p:[a-lq-z](减去)
  1. String regex = "[a-z&&[^m-p]]";//a-z,除了m-p
  2. System.out.println("m".matches(regex));//f
  3. System.out.println("a".matches(regex));//t
  4. System.out.println("z".matches(regex));//t
  5. System.out.println("n".matches(regex));//f
预定义字符类
. 任何字符
\d 数字:[0-9]
\D 非数字: [^0-9]
\s 空白字符:[ \t\n\x0B\f\r] //空格,\t:制表符,\n:换行,\x0B:垂直制表符,\f:翻页,\r:回车
\S 非空白字符:[^\s] 
\w 单词字符:[a-zA-Z_0-9] 
\W 非单词字符:[^\w] 
. 任何字符
  1. String regex = "..";
  2. System.out.println("a".matches(regex));f
  3. System.out.println("ab".matches(regex));t
\d 数字:[0-9]
  1. String regex = "\\d";//\代表转义字符,如果想表示\d的话,需要\\d
  2. System.out.println("0".matches(regex));t
  3. System.out.println("a".matches(regex));f
  4. System.out.println("9".matches(regex));t
\D 非数字: [^0-9]
  1. String regex = "\\D";//\D表示非字符
  2. System.out.println("0".matches(regex));f
  3. System.out.println("9".matches(regex));f
  4. System.out.println("a".matches(regex));t
\s 空白字符:[ \t\n\x0B\f\r] //空格,\t:制表符,\n:换行,\x0B:垂直制表符,\f:翻页,\r:回车
  1. String regex = "\\s";
  2. System.out.println(" ".matches(regex));t
  3. System.out.println(" ".matches(regex)); //一个tab键t
  4. System.out.println(" ".matches(regex)); //四个空格f
\S 非空白字符:[^\s] 
  1. String regex = "\\S";
  2. System.out.println(" ".matches(regex));f
  3. System.out.println(" ".matches(regex));f
  4. System.out.println("a".matches(regex));t
\w 单词字符:[a-zA-Z_0-9] 
  1. String regex = "\\w";
  2. System.out.println("a".matches(regex));t
  3. System.out.println("z".matches(regex));t
  4. System.out.println("_".matches(regex));t
  5. System.out.println("%".matches(regex));f
\W 非单词字符:[^\w] 
  1. String regex = "\\W";
  2. System.out.println("a".matches(regex));f
  3. System.out.println("z".matches(regex));f
  4. System.out.println("_".matches(regex));f
  5. System.out.println("%".matches(regex));t
Greedy 数量词
X? X,一次或一次也没有
X* X,零次到多次
X+ X,一次到多次
X{n} X,恰好 n 次 
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次 
X? X,一次或一次也没有
  1. String regex = "[abc]?";
  2. System.out.println("a".matches(regex));t
  3. System.out.println("b".matches(regex));t
  4. System.out.println("c".matches(regex));t
  5. System.out.println("d".matches(regex));f
  6. System.out.println("".matches(regex));t
X* X,零次到多次
  1. String regex = "[abc]*";
  2. System.out.println("".matches(regex));t
  3. System.out.println("abc".matches(regex));t
  4. System.out.println("a".matches(regex));t
  5. System.out.println("aaaa".matches(regex));t
X+ X,一次到多次
  1. String regex = "[abc]+";
  2. System.out.println("".matches(regex));f
  3. System.out.println("a".matches(regex));t
  4. System.out.println("aaaaabbbbccccc".matches(regex));t
X{n} X,恰好 n 次 
  1. String regex = "[abc]{5}";
  2. System.out.println("abcba".matches(regex));t
  3. System.out.println("abcbaabcabbabab".matches(regex));f
  4. System.out.println("abcb".matches(regex));f
  5. System.out.println("abcbaaba".matches(regex));f
X{n,} X,大于等于n次
  1. String regex = "[abc]{5,}";//>=5次
  2. System.out.println("abcba".matches(regex));t
  3. System.out.println("abcbaabcabbabab".matches(regex));t
  4. System.out.println("abcb".matches(regex));f
  5. System.out.println("abcbaaba".matches(regex));t
X{n,m} X, 大于等于n小于等于m
  1. String regex = "[abc]{5,15}";
  2. System.out.println("abcba".matches(regex));t
  3. System.out.println("abcbaabcabbabab".matches(regex));t
  4. System.out.println("abcb".matches(regex));f
  5. System.out.println("abcbaabaabcbaaba".matches(regex));f


2、常见对象(Pattern和Matcher的概述)(了解)
* A:Pattern和Matcher的概述
* B:模式和匹配器的典型调用顺序
* 通过JDK提供的API,查看Pattern类的说明

* 典型的调用顺序是 
* Pattern p = Pattern.compile("a*b");
* Matcher m = p.matcher("aaaaab");
* boolean b = m.matches();
需求:把一个字符串中的手机号码获取出来
  1. package com.heima.regex;
  2. import java.util.regex.Matcher;
  3. import java.util.regex.Pattern;
  4. public class Demo8_Pattern {
  5. public static void main(String[] args) {
  6. //demo1();
  7. //demo2();
  8. demo3();
  9. }
  10. //匹配查找邮箱
  11. private static void demo3() {//[1][\\d&&[012678]][\\d]{9}
  12. String s = "我的邮箱是smhjx2006@163.com,我曾经用过hmsykt2015@sina.com.cn,我还用过hmsykt0902@qq.com";
  13. //String regex = "[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+";//较为精确的匹配。
  14. String regex = "\\w+@\\w+(\\.\\w+)+";
  15. Pattern p = Pattern.compile(regex);
  16. Matcher matcher = p.matcher(s);
  17. while(matcher.find()){
  18. System.out.println(matcher.group());
  19. }
  20. }
  21. //匹配查找手机号
  22. private static void demo2() {
  23. String s = "我的手机是18511866260,我曾用过18987654321,还用过18812345678";
  24. String regex = "1[3578]\\d{9}";
  25. Pattern p = Pattern.compile(regex);
  26. Matcher m = p.matcher(s);
  27. /*boolean b1 = m.find();
  28. System.out.println(b1);
  29. System.out.println(m.group());
  30. boolean b2 = m.find();
  31. System.out.println(b2);
  32. System.out.println(m.group());*/
  33. while(m.find())
  34. System.out.println(m.group());
  35. }
  36. }


3、案例(掌握)
1、我有如下一个字符串:”91 27 46 38 50”,请写代码实现最终输出结果是:”27 38 46 50 91”
  1. package com.heima.test;
  2. import java.util.Arrays;
  3. public class Test1 {
  4. /**
  5. * 分析:
  6. * 1,将字符串切割成字符串数组
  7. * 2,将字符串转换成数字并将其存储在一个等长度的int数组中
  8. * 3,排序
  9. * 4,将排序后的结果遍历并拼接成一个字符串
  10. */
  11. public static void main(String[] args) {
  12. String s = "91 27 46 38 50";
  13. //1,将字符串切割成字符串数组
  14. String[] sArr = s.split(" ");//如果按照.切割,必须使用\\.转义
  15. //2,将字符串转换成数字并将其存储在一个等长度的int数组中
  16. int[] arr = new int[sArr.length];
  17. for (int i = 0; i < arr.length; i++) {
  18. arr[i] = Integer.parseInt(sArr[i]); //将数字字符串转换成数字
  19. }
  20. //3,排序
  21. Arrays.sort(arr);
  22. //4,将排序后的结果遍历并拼接成一个字符串27 38 46 50 91
  23. /*String str = "";
  24. for (int i = 0; i < arr.length; i++) {
  25. if(i == arr.length - 1) {
  26. str = str + arr[i]; //27 38 46 50 91
  27. }else {
  28. str = str + arr[i] + " "; //27 38 46 50
  29. }
  30. }
  31. System.out.println(str);*/
  32. StringBuilder sb = new StringBuilder();
  33. for (int i = 0; i < arr.length; i++) {
  34. if(i == arr.length - 1) {
  35. sb.append(arr[i]);
  36. }else {
  37. sb.append(arr[i] + " ");
  38. }
  39. }
  40. System.out.println(sb);
  41. }
  42. }

2、需求:我我....我...我.要...要要...要学....学学..学.编..编编.编.程.程.程..程
     将字符串还原成:“我要学编程”。
  1. public static void main(String[] args) {
  2. String str= "我我....我...我.要...要要...要学....学学..学.编..编编.编.程.程.程..程";
  3. //第一步 去掉所有的.
  4. String str1 = str.replaceAll("\\.+", "");
  5. //第二步 叠词去重 \\1+表示第一组(.)中的数据出现1次或多次,翻译过来就是说任意字符出现一次或多次
  6. String str2 = str1.replaceAll("(.)\\1+", "$1");
  7. System.out.println(str2);
  8. }
(.)\\1+:
(.) 第一个字符是任意字符,并且我把它放到组里面,方便以后直接调用这个组
1+:刚才那个字符出现1次或者多次
$1:调用刚才定义的组
什么是组???怎么数?
组:就是一个括号括起来的东西
怎么数从左往右数(



2、Math(看到方法名知道意思即可)

1、Math中的常量
E,PI
比任何其他值都更接近 e(即自然对数的底数)的 double 值。

2、Math中的方法
abs()绝对值
ceil 大于等于参数的最小整数,返回double
floor 小于等于参数的最大整数,返回double
round() 四舍五入
random() 随机数
max(x,y) 获取两个数中的最大值

//求绝对值
pubilc static int abs(int num)
public long abs(long num)
public float abs(float num)
pbulic double abs(doble num)

//ceil:天花板
public static double ceil(double num)//返回大于等于参数的最小整数 ,返回值是double 类型
//floor :底板
public static double floor(double num)//返回小于等于参数的最大整数 ,返回值是double 类型
//round :四舍五入
public static int round(float num)//
public static long round(double num)//四舍五入

//最大值
public static double max(double num1, double num2);
public static float max(float num1, float num2)
public static int max(int num1, int num2)
public static long max(long num1, long num2)

//随机数
public static double random();


3、System(了解)

1 public static void gc() 调用后执行垃圾回收
2 public static void exit(int status) 非0表示异常退出,1表示正常退出
3 public static long currentTimeMillis() 获取当前时间的毫秒值(掌握)
4 pubiic static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 数组拷贝

4、BigInteger类的概述和方法使用(了解)

* A:BigInteger的概述
* 可以让超过Integer范围内的数据进行运算
* B:构造方法
* public BigInteger(String val)
* C:成员方法
* public BigInteger add(BigInteger val) //+(加)
* public BigInteger subtract(BigInteger val)//-(减)
* public BigInteger multiply(BigInteger val)//*(乘)
* public BigInteger divide(BigInteger val)// /(除)
* public BigInteger[] divideAndRemainder(BigInteger val)
案例:
  1. package com.heima.otherclass;
  2. import java.math.BigInteger;
  3. public class Demo4_BigInteger {
  4. public static void main(String[] args) {
  5. //long num = 123456789098765432123L;
  6. //String s = "123456789098765432123";
  7. BigInteger bi1 = new BigInteger("100");
  8. BigInteger bi2 = new BigInteger("2");
  9. System.out.println(bi1.add(bi2)); //+
  10. System.out.println(bi1.subtract(bi2)); //-
  11. System.out.println(bi1.multiply(bi2)); //*
  12. System.out.println(bi1.divide(bi2)); ///(除)
  13. BigInteger[] arr = bi1.divideAndRemainder(bi2); //取除数和余数
  14. for (int i = 0; i < arr.length; i++) {
  15. System.out.println(arr[i]);
  16. }
  17. }
  18. }

5、BigDecimal类的概述和方法使用(了解)

* A:BigDecimal的概述
* 由于在运算的时候,float类型和double很容易丢失精度,演示案例。
* 所以,为了能精确的表示、计算浮点数,Java提供了BigDecimal

* 不可变的、任意精度的有符号十进制数。
* B:构造方法
* public BigDecimal(String val)
* C:成员方法
* public BigDecimal add(BigDecimal augend)
* public BigDecimal subtract(BigDecimal subtrahend)
* public BigDecimal multiply(BigDecimal multiplicand)
* public BigDecimal divide(BigDecimal divisor)
* D:案例演示
* BigDecimal类的构造方法和成员方法使用
案例:
  1. package com.heima.otherclass;
  2. import java.math.BigDecimal;
  3. public class Demo5_BigDecimal {
  4. /**
  5. 十进制表示1/3
  6. 0.3333333333333333333333333333333333333333
  7. */
  8. public static void main(String[] args) {
  9. //System.out.println(2.0 - 1.1);
  10. /*BigDecimal bd1 = new BigDecimal(2.0); //这种方式在开发中不推荐,因为不够精确
  11. BigDecimal bd2 = new BigDecimal(1.1);
  12. System.out.println(bd1.subtract(bd2));*/
  13. /*BigDecimal bd1 = new BigDecimal("2.0"); //通过构造中传入字符串的方式,开发时推荐
  14. BigDecimal bd2 = new BigDecimal("1.1");
  15. System.out.println(bd1.subtract(bd2));*/
  16. BigDecimal bd1 = BigDecimal.valueOf(2.0); //这种方式在开发中也是推荐的
  17. BigDecimal bd2 = BigDecimal.valueOf(1.1);
  18. System.out.println(bd1.subtract(bd2));
  19. }
  20. }



6、Date类的概述和方法使用(掌握)

A:Date类的概述(是java.util包下的,别导错了)
* 类 Date 表示特定的瞬间,精确到毫秒。 
B:构造方法
* public Date()
* public Date(long date)
C:成员方法
* public long getTime()
* public void setTime(long time)

D:练习
     1、通过Date日期对象获取毫秒值
          Date date = new Date();
          long time = date.getTime();
     2、通过毫秒值创造Date日期对象
                    long time = 1222L;//毫秒值
                    Date date = new Date(time);

7、SimpleDateFormat类实现日期和字符串的相互转换(掌握)

* A:DateFormat类的概述
* DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。是抽象类,所以使用其子类SimpleDateFormat
* B:SimpleDateFormat构造方法
* public SimpleDateFormat()
* public SimpleDateFormat(String pattern)
* C:成员方法
* public final String format(Date date)
* public Date parse(String source)
  1. public static void main(String[] args)throws Exception {
  2. /*
  3. * 把日期对象转换成字符串
  4. */
  5. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
  6. String strDate = format.format(new Date());
  7. System.out.println(strDate);
  8. /*
  9. * 把字符串转换成日期对象
  10. */
  11. SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
  12. Date date = f.parse("2016-04-28 23:19:34:716");
  13. System.out.println(date);
  14. }



*D:算一下你来到这个世界多少天?
  1. package com.heima.test;
  2. import java.text.ParseException;
  3. import java.text.SimpleDateFormat;
  4. import java.util.Date;
  5. public class Test2 {
  6. /**
  7. * * A:案例演示
  8. * 需求:算一下你来到这个世界多少天?
  9. * 分析:
  10. * 1,将生日字符串和今天字符串存在String类型的变量中
  11. * 2,定义日期格式化对象
  12. * 3,将日期字符串转换成日期对象
  13. * 4,通过日期对象后期时间毫秒值
  14. * 5,将两个时间毫秒值相减除以1000,再除以60,再除以60,再除以24得到天
  15. * @throws ParseException
  16. */
  17. public static void main(String[] args) throws ParseException {
  18. //1,将生日字符串和今天字符串存在String类型的变量中
  19. String birthday = "1983年07月08日";
  20. String today = "2015年9月22日";
  21. //2,定义日期格式化对象
  22. SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
  23. //3,将日期字符串转换成日期对象
  24. Date d1 = sdf.parse(birthday);
  25. Date d2 = sdf.parse(today);
  26. //4,通过日期对象后期时间毫秒值
  27. long time = d2.getTime() - d1.getTime();
  28. //5,将两个时间毫秒值相减除以1000,再除以60,再除以60,再除以24得到天
  29. System.out.println(time / 1000 / 60 / 60 / 24 );
  30. }
  31. }


8、Calendar类的概述和获取日期的方法(掌握)

* A:Calendar类的概述
* Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。
* B:成员方法
* public static Calendar getInstance()
* public int get(int field)
* public void add(int field,int amount)
* public final void set(int year,int month,int date)

3、注意事项
1、get(Calendar.MONTH)的值的范围是0-11,不是1-12
    

//外国人的1是中国的7

       //外国人的0-6是中国的周1-5

       int week =  calendar.get(Calendar.DAY_OF_WEEK)==1?7: calendar.get(Calendar.DAY_OF_WEEK)-1;

2、日期处理过程中能使用Calendar就不使用Date

  1. import java.util.Calendar;
  2. public class CalendarDemo {
  3. public static void main(String[] args) {
  4. Calendar c = Calendar.getInstance(); // 父类引用指向子类对象
  5. /*
  6. * get方法测试
  7. */
  8. System.out.println(c.get(Calendar.YEAR)); // 通过字段获取年
  9. System.out.println(c.get(Calendar.MONTH)); // 通过字段后期月,但是月是从0开始编号的
  10. System.out.println(c.get(Calendar.DAY_OF_MONTH));// 月中的第几天
  11. System.out.println(c.get(Calendar.DAY_OF_WEEK));// 周日是第一天,周六是最后一天
  12. /*
  13. * add方法测试
  14. */
  15. c.add(Calendar.MONTH, -1); // 对指定的字段进行向前减或向后加
  16. printTime(c);
  17. /*
  18. * set方法测试
  19. */
  20. c.set(Calendar.YEAR, 2000); // 修改指定字段
  21. c.set(2000, 7, 8);
  22. printTime(c);
  23. }
  24. /**
  25. * 打印年月日 星期
  26. * @param c
  27. */
  28. public static void printTime(Calendar c) {
  29. int year = c.get(Calendar.YEAR);
  30. int month = c.get(Calendar.MONDAY)+1;
  31. int day = c.get(Calendar.DAY_OF_MONTH);
  32. int week = c.get(Calendar.DAY_OF_WEEK)==1?7: c.get(Calendar.DAY_OF_WEEK)-1;
  33. System.out.println(year+"年"+month+"月"+day+"日星期"+week);
  34. }
  35. }


           C 案例键盘录入任意一个年份,判断该年是闰年还是平年(掌握)
  1. package com.heima.test;
  2. import java.util.Calendar;
  3. import java.util.Scanner;
  4. public class Test3 {
  5. /**
  6. * * A:案例演示
  7. * 需求:键盘录入任意一个年份,判断该年是闰年还是平年
  8. * Calendar c = Calendar.getInstance();
  9. *
  10. * 分析:
  11. * 1,键盘录入年Scanner
  12. * 2,创建Calendar c = Calendar.getInstance();
  13. * 3,通过set方法设置为那一年的3月1日
  14. * 4,将日向前减去1
  15. * 5,判断日是多少天,如果是29天返回true否则返回false
  16. */
  17. public static void main(String[] args) {
  18. Scanner sc = new Scanner(System.in);
  19. System.out.println("请输入年份,判断该年份是闰年还是平年:");
  20. //int year = sc.nextInt();
  21. String line = sc.nextLine(); //录入数字字符串
  22. int year = Integer.parseInt(line); //将数字字符串转换成数字
  23. boolean b = getYear(year); //这里输入的是年份
  24. System.out.println(b);
  25. }
  26. private static boolean getYear(int year) {
  27. //2,创建Calendar c = Calendar.getInstance();
  28. Calendar c = Calendar.getInstance();
  29. //设置为那一年的3月1日
  30. c.set(year, 2, 1);
  31. //将日向前减去1
  32. c.add(Calendar.DAY_OF_MONTH, -1);
  33. //判断是否是29天
  34. return c.get(Calendar.DAY_OF_MONTH) == 29;
  35. }
  36. }

day14_API第四天


8、今天必须掌握的内容。以及常见的笔试题和面试题(学完这个就可以放心学习后面的知识了)

1、基本的正则表达式和数量词要能看懂
2、获取当前时间的毫秒值的两种方式
3、日期格式化类的使用(日期转字符串,字符串转日期)
    日期转字符串   String str = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS").format(new Date());
    字符串转日期   Date date =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS").parse("2018-09-09 11:11:11:111");
4、笔试题:判断平年闰年
5、笔试题:我我....我...我.要...要要...要学....学学..学.编..编编.编.程.程.程..程
     将字符串还原成:“我要学编程
    思路:1、去掉所有的...reaplaceAll("\\.","");
               2、替换叠词 replaceAll("(.)\\1+","$1")
6、我有如下一个字符串:”91 27 46 38 50”,请写代码实现最终输出结果是:”27 38 46 50 91”
7、写一个正则表达式,可以匹配尾号5连的手机号。
规则: 第1位是1,第二位可以是数字358其中之一,后面6位任意数字,最后5位为任意相同的数字,
第1位是1,第二位可以是数字358其中之一,后面6位任意数字,最后5位为任意相同的数字
  1. package com.heima.stringStringBuilderStringBuffer;
  2. /**
  3. * 写一个正则表达式,可以匹配尾号5连的手机号。
  4. * 规则: 第1位是1,第二位可以是数字3458其中之一,后面6位任意数字,最后5位为任意相同的数字。
  5. * 例如:18601088888、13912366666
  6. * @author JX
  7. *
  8. */
  9. public class Test3 {
  10. public static void main(String[] args) {
  11. String regex = "[1][3458]\\d{4}(\\d)\\1{4}";
  12. String phone1 = "18601088888";
  13. String phone2 = "13912366666";
  14. System.out.println(phone1.matches(regex));
  15. System.out.println(phone2.matches(regex));
  16. }
  17. }

8、模拟用户注册
        1、用户录入手机号
        2、校验用户录入的手机号,1、长度是否11位,2、是否全是数字
        3、将手机号后四位截取出来通过Random类加密,生成一个0-99999之间的数字作为验证码打印到控制台
  1.     /**
  2. * 8、模拟用户注册 1、用户录入手机号 2、校验用户录入的手机号,1、长度是否11位,2、是否全是数字
  3. * 3、将手机号后四位截取出来通过Random类加密,将加密后的数字作为校验码打印在控制台
  4. *
  5. * @param args
  6. */
  7. public static void main(String[] args) {
  8. Scanner sc = new Scanner(System.in);
  9. System.out.println("请输入手机号");
  10. String phone = sc.nextLine();
  11. //校验成功
  12. if(phone.length()==11 && phone.matches("[0-9]{11,}")){
  13. String num = phone.substring(7);//后四位
  14. Random r = new Random(Long.parseLong(num));
  15. int yzm = r.nextInt(100000);//验证码
  16. System.out.println("验证码是:"+yzm);
  17. }else{
  18. System.out.println("请输入正确的手机号");
  19. }
  20. }

9、用正则判断一个数字(该数字的长度至少为7)的末尾是不是相同的7位数
  1. public class Test {
  2. public static void main(String[] args) {
  3. System.out.println("7777777".matches(".*(\\d)\\1{6}"));
  4. }
  5. }











上一篇:spring支持的websocket


下一篇:Oracle的SQL基础